官方文档说明https://docs.oracle.com/javase/tutorial/collections/interfaces/list.html


List特点

  • A List is an ordered Collection (sometimes called a sequence). Lists may contain duplicate elements. In addition to the operations inherited from Collection.
  • Two List objects are equal if they contain the same elements in the same order.
  • The cursor is always between two elements.

    包含两种通用的List集合实现

    The Java platform contains two general-purpose List implementations. ArrayList, which is usually the better-performing implementation, and LinkedList which offers better performance under certain circumstances.

  • ArrayList

ArrayList底层是采用数组进行存储的,(所以在进行数据的查找操作的时候的效率比LinkedList高很多),在创建ArrayList的时候,如果提前知道大小的话,提前初始化该长度,这样就避免ArrayList数据的迁移,因为要是不声明大小的话,ArrayList默认赋值为16,要是之后容量超过16,就会使用grow函数进行扩增,然后将原来的数据赋值到新的数组里面(增长为原来的1.5倍)。
image.png

ArrayList所有的方法如下:
image.png image.png


  • LinkedList

LinkedList的底层实现是双向链表,遍历的速度大大慢于ArrayList,而增加、删除的效率却大大地优于ArrayList,因为LinkedList在进行查找指定元素的时候,都需要从首节点开始,而ArrayList直接通过下表即可获取,但是在进行数据的增加和删除的时候,可以通过修改头尾两个节点的地址就可以完成,而ArrayList还需要将元素的位置进行迁移,从而耗费很多时间。

LinkedList所有的方法如下:
image.png image.png

总结:

ArrayList 和LinkedList使用场景可以看作是数组和链表的使用场景,因为ArrayList底层采用数组,适用于查找操作多、增加删除操作少的场景;LinkedList底层采用链表,适合用于增加、删除多,查找少的场景。