1、list 接口
1.1 特点
- List 是 Collection 接口的子接口,
- List 中的元素是有序的,而且可以重复。
- List 集合中的数据元素都对应一个整数形式的序号索引,记录其在集合中的位置,可以根据此序号存取元素。
JDK 中常用的 List 实现类是 ArrayList 和 LinkedList。
1.2 方法
List 接口继承自 Collection 接口,除了拥有 Collection 接口所拥有的方法外,还拥有下列方法:
void add(int index,Object o)
在集合的指定 index 位置处,插入指定的 o 元素。
Object get(int index)
返回集合中 index 位置的数据元素。
int indexOf(Object o)
返回此集合中第一次出现的指定 o 元素的索引,如果此集合不包含 o 元素,则返回-1。
int lastIndexOf(Object o)
返回此集合中最后出现的指定 o 元素的索引,如果此集合不包含 o 元素,则返回-1。
Object remove(int index)
移除集合中 index 位置的数据元素。
Object set(int index,Object o)
用指定的 o 元素替换集合中 index 位置的数据元素。
2、List 的实现类
List 实现类是 ArrayList 和 LinkedList。
LinkedList 和 ArrayList 在应用层面类似,只是底层存储结构上的差异导致了二者对于不同操作,存在性能上的差异。这其实就是顺序表和链表之间的差异。一般而言,对于“索引访问”较多的集合操作建议使用 ArrayList,而对于“增删”较多的集合操作建议使用 LinkedList。
2.1 ArrayList
ArrayList 实现了 List 接口,其底层采用的数据结构是数组。
根据数据结构的知识可知,数组(顺序表)在插入或删除数据元素时,需要批量移动数据元素,故性能较差;但在根据索引获取数据元素时,因为数组是连续存储的,所以在遍历元素或随机访问元素时效率高。
ArrayList 的底层就是数组,因此 ArrayList 更加适合根据索引访问元素的操作。
2.2 LinkedList
LinkedList 的底层是链表。
LinkedList 接口除了拥有 ArrayList 接口提供的方法外,还增加了如下一些方法。
void addFirst(Object o)
将指定数据元素插入此集合的开头。
void addLast(Object o)
将指定数据元素插入此集合的结尾。
Object getFirst()
返回此集合的第一个数据元素。
Object getLast()
返回此集合的最后一个数据元素。
Object removeFirst()
移除并返回此集合的第一个数据元素。
Object removeLast()
移除并返回此集合的最后一个数据元素。