ArrayList、LinkedList和Vector的区别

ArrayList 容量默认是10,它和 Vector 的底层实现都是基于动态数组 ,ArrayList 的内部元素可以通过 get 和 set 方法进行访问 ;LinkedList的底层实现是基于双向链表, 当数据量很大或者操作很频繁的情况下**,插入和删除元素时具有比 ArrayList 更好的性能,在 get 和 set 方面弱于 ArrayList**。

LinkedList 比 ArrayList 更占内存,因为 LinkedList 的每个节点除了存储元素,还要存储两个指针,一个指向前驱,一个指向后继。Vector 和 ArrayList 相似,但属于强同步类,内部由于synchronized 同步关键字的存在,其方法都是同步的,保证了线程安全。如果程序本身是线程安全的,使用ArrayLIst是更好的选择。

Vector 的扩容机制是每次请求其大小的2倍 空间,ArrayList 自动扩容时,先创建一个长度为原数组长度1.5倍的新数组,然后将原数组中的数据拷贝到新数组中。如果能预估数据量,那么就给 ArrayList 分配一个较大的初始值,可以减少调整大小的开销,ArrayList支持缩容,但不会自动缩容。

LinkedLIst 实现了 Queue 和 Deque 接口,可以使用 offer、peek、poll 等方法。ArrayList根据下标以O(1)时间复杂度对元素进行访问,而LinkedList是O(n)。

相关推荐
幸运小圣7 小时前
for...of vs for 循环全面对比【前端JS】
开发语言·前端·javascript
沙威玛_LHE7 小时前
C++ 头文件:语言功能的 “模块化工具箱”(第三章)
c++
liu****7 小时前
12.线程同步和生产消费模型
linux·服务器·开发语言·c++·1024程序员节
顺顺 尼7 小时前
了解和使用多态
c++
学习编程的Kitty8 小时前
JavaEE初阶——多线程(5)单例模式和阻塞队列
java·开发语言·单例模式
0x00078 小时前
翻译《The Old New Thing》- 为什么 SHFormatDateTime 要接收一个未对齐的 FILETIME?
c++·windows
懒羊羊不懒@8 小时前
JavaSe—Stream流☆
java·开发语言·数据结构
Js_cold8 小时前
(* clock_buffer_type=“NONE“ *)
开发语言·fpga开发·verilog·vivado·buffer·clock
周杰伦_Jay8 小时前
【Go微服务框架深度对比】Kratos、Go-Zero、Go-Micro、GoFrame、Sponge五大框架
开发语言·微服务·golang
杰瑞哥哥9 小时前
标准 Python 项目结构
开发语言·python