1. ArrayList
- 基于数组实现,允许空值和重复元素。
- 当添加元素数量大于数组容量时,会通过1.5倍的扩容机制进行扩容。
- 实现了 RandomAccess 接口,表明它具有随机访问的能力,所以对ArrayList 进行遍历时,不推荐使用 foreach 循环遍历,因为 foreach 最终会被转换成迭代器遍历的形式,效率不如 for(int i=0;;)的遍历方式。
- 新增和删除操作会造成数组元素的移动。由于支持随机访问,所以get和set操作的效率很高。
- ArrayList使用在查询较多、插入和删除较少的场景。
2. LinkedList
- 基于双向链表实现.
- 不支持随机访问,但插入和删除操作时间复杂度为O(1),而ArrayList为O(n)。
- ArrayList 需要在尾部预留空间,LinkedList 不用。
- LinkedList 用在查询较少、插入删除较多的情况。