1.底层数据结构不同
ArrayList基于数组实现,LinkedList基于双向链表实现。
2.多数情况下,ArrayList更利于查找,LinkedList更利于增删。
a.ArrayList更利于查找:
因为ArrayList基于数组实现,get(index)直接通过数组下标获取,时间复杂度为O(1);LinkedList基于双向链表实现,get(index)需要遍历链表,时间复杂度为O(n)。
b.LinkedList更利于增删:
ArrayList的增删,如果是在数组末尾,直接插入或删除即可,但是如果在数组中间位置,则需要移动元素,而且还有可能触发扩容操作。而LinkedList的增删,只需要改变节点的指向即可。
3.是否支持随机访问
ArrayList基于数组,可以根据下标查找元素,所以支持随机访问。LinkedList基于双向链表,无法根据序号直接获取元素,不支持随机访问。
4.内存占用
ArrayList基于数组,是一块连续的内存空间。LinkedList基于双向链表,内存空间不连续。