ArrayList与LinkedList

579 阅读1分钟

ArrayList和LinkedList分别是基于数组和双向链表实现的线性表。由于实现原理的不同,ArrayList和LinkedList在随机查询和插入、删除时的效率存在着差异。ArrayList随机查询快插入、删除慢,适用于查询频繁、修改少的场景。LinkedList随机查询慢插入、删除慢,适用于查询少、修改频繁的场景。

ArrayList

  • ArrayList 是基于数组实现的、可以自动扩容的、地址连续的线性表
  • Arraylist 每个元素都有对应的下标,查询是可以根据下标快速找到对应的元素
  • Arraylist 每次插入、删除元素时,都需要移动部分元素保证连续性,因此插入、删除效率低
  • Arraylist 初始大小是10(可指定),第一次扩容的计算方式是:10*1.5+1=16

LinkedList

  • LinkedList 是基于双向链表实现的线性表
  • LinkedList 每个元素都要存储前后两个指针,相对ArrayList占用了更多内存
  • LinkedList 每次查询,都要从首尾移动指针遍历,随机查询性能低
  • LinkedList 插入、删除时,只需要修改指针方向性能很高
  • LinkedList 理论上容量是无限的,不需要扩容