ArrayList和LinkedList分别是基于数组和双向链表实现的线性表。由于实现原理的不同,ArrayList和LinkedList在随机查询和插入、删除时的效率存在着差异。ArrayList随机查询快插入、删除慢,适用于查询频繁、修改少的场景。LinkedList随机查询慢插入、删除慢,适用于查询少、修改频繁的场景。
ArrayList
- ArrayList 是基于数组实现的、可以自动扩容的、地址连续的线性表
- Arraylist 每个元素都有对应的下标,查询是可以根据下标快速找到对应的元素
- Arraylist 每次插入、删除元素时,都需要移动部分元素保证连续性,因此插入、删除的效率低
- Arraylist 初始大小是10(可指定),第一次扩容的计算方式是:10*1.5+1=16
LinkedList
- LinkedList 是基于双向链表实现的线性表
- LinkedList 每个元素都要存储前后两个指针,相对ArrayList占用了更多内存
- LinkedList 每次查询,都要从首尾移动指针遍历,随机查询的性能低
- LinkedList 插入、删除时,只需要修改指针方向,性能很高
- LinkedList 理论上容量是无限的,不需要扩容