1.ArrayList 基于数组实现 , LinkedList 基于链表实现.
2.ArrayList 数据存放在连续空间上的 , LinkedList 数据不是存放在连续空间的.
3.ArrayList 可以进行高效的随机访问 , 按下标操作时间复杂度为O(1).
4.LinkedList 能够高效进行插入和删除 , 时间复杂度为O(1).
5.对于add(index, elem) , ArrayList 取下标过程是O(1) , 插入过程是O(N) ; LinkedList 取下标O(N) , 插入过程O(1).
6.ArrayList 初始化的时候通过capacity参数指定最大容量 , add尾插的时候 , 元素个数小于最大容量的时候,效率为O(1) , 当达到最大 容量 , 会进行扩容操作(new一个1.5倍(Java8)的连续空间,把元素搬过来) , LinkedList 没有这个概念 , 每插入一个新的元素 , new一个新的结点对象.
7.在频繁内存申请释放的时候 , 很容易产生内存碎片 , ArrayList比较害怕内存碎片 , 而 LinkedList 则不受影响.