一、ArrayList 和 LinkedList 的区别
-
ArrayList 的底层是顺序表(数组),LinkedList 底层是链表
-
ArrayList 数据存放在连续的内存空间上的,LinkedList 数据 不是存放在连续的内存空间上的
-
ArrayList 访问数据是随机且高效的,按照下表访问数据的时间复杂度是 O(1)
-
LinkedList 随机插入删除数据是高效的,时间复杂度是 O(1);但是,其中 add 方法的插入数据操作的时间复杂度是 O(N);
对于 add(Index,elem):
ArrayList 取下标的过程是 O(1),插入删除数据是 O(N);
LinkedList 取下标的过程是 O(N),插入删除数据是 O(1); -
ArrayList 在初始化的时候,需要 capacity 参数来指定最大容量,当 add 尾插时,元素个数小于 capacity 时,效率都高,时间复杂度为 O(1);当参数个数达到 capacity 时,就得进行扩容操作(就是申请一个大的内存空间,将原数据搬运过来,在释放原来的内存);
LinkedList 没有 capacity 参数这个说法,而是需要一个内存就申请一个内存,方便操作 -
ArrayList 比较害怕内存碎片,而 LinkedList 不需要担心这个问题
二、ArrayList 和 Vector 的区别
- Vector 是老版本的顺序表,ArrayList 是新版本的顺序表
- Vector 是线程安全的,ArrayList 是线程不安全的
- 现在不太推荐使用 Vector ,更建议使用 JUC (Java.util.C……)里的组件