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)。

相关推荐
qq_548674932 分钟前
Go的env和bashrc的GOROOT配置不同
linux·开发语言·golang
freexyn3 分钟前
Matlab自学笔记六十九:多项式求值、求根、积分和求导
开发语言·笔记·matlab
灵犀坠3 分钟前
前端高频知识点汇总:从手写实现到工程化实践(面试&开发双视角)
开发语言·前端·javascript·tcp/ip·http·面试·职场和发展
郝学胜-神的一滴4 分钟前
Linux中的alarm函数详解:定时器信号处理指南
linux·服务器·开发语言·c++·程序人生
iナナ7 分钟前
Java自定义协议的发布订阅式消息队列(一)
java·开发语言·spring·消息队列·生成消费者模型
方也_arkling10 分钟前
【JS】日期对象及时间戳的使用(制作距离指定日期的倒计时)
开发语言·javascript·ecmascript
Zfox_11 分钟前
【Go】反射
开发语言·后端·golang
郝学胜-神的一滴11 分钟前
Linux kill命令与kill函数:从信号原理到实战解析
linux·服务器·开发语言·c++·程序人生
未来之窗软件服务13 分钟前
操作系统应用(三十七)C#华旭金卡身份证SDK-HX-FDX3S—东方仙盟筑基期
开发语言·c#·身份证阅读器·酒店管理系统·仙盟创梦ide
say_fall14 分钟前
C语言编程实战:每日一题:有效的括号
c语言·开发语言·数据结构·