(面试题)ArrayList和LinkedList区别

72 阅读1分钟

首先,底层数据结构不同

  • ArrayList底层是一个动态数组,源码中使用System.arrayCopy进行扩容,扩容后的数组就是当前数组的长度 + 当前数组右移一位,也就是1.5倍
  • LinkedList底层是双向链表,这样就有一个好处,查询的下标如果小于 length/2 就正向查找,否则就逆向查找,这样的话查询效率能够提高

然后,查询和删除的复杂度不同

  • ArrayList查询效率高,新增和删除效率低。查询效率高是因为支持随机访问,新增和删除效率低是因为需要移动大量元素位置
  • LinkedList查询效率低,新增和删除效率高。查询效率低是因为链表结构需要遍历查询。新增和删除效率高是因为不需要移动元素位置