首先,底层数据结构不同
- ArrayList底层是一个动态数组,源码中使用System.arrayCopy进行扩容,扩容后的数组就是当前数组的长度 + 当前数组右移一位,也就是1.5倍
- LinkedList底层是双向链表,这样就有一个好处,查询的下标如果小于 length/2 就正向查找,否则就逆向查找,这样的话查询效率能够提高
然后,查询和删除的复杂度不同
- ArrayList查询效率高,新增和删除效率低。查询效率高是因为支持随机访问,新增和删除效率低是因为需要移动大量元素位置
- LinkedList查询效率低,新增和删除效率高。查询效率低是因为链表结构需要遍历查询。新增和删除效率高是因为不需要移动元素位置