List接口源码分析
java.util.List 接口直接继承自 java.util.Collection 接口,在 Collection 接口的功能之上添加了 List 功能特有的接口规范。

一、List接口特点
有序集合。
该接口的子类实现可以精确控制列表中每个元素的插入位置,可以通过索引访问元素,并搜索列表中的元素。
与 Set 集合不同,通常允许重复元素,且允许
null元素,null元素也可重复。List 接口提供了一个特殊的迭代器:
java.util.ListIterator,它允许元素插入和替换,以及java.util.Iterator接口提供的常规操作之外的双向访问。还提供了一种从列表的指定位置开始的迭代器:
listIterator(int index)。
二、继承自 Collection 的方法
详细方法描述,见:java.util.Collection 接口。
1  |  | 
三、List接口方法描述
3.1 添加方法
List 接口包含 四种添加方法:
- 继承自 Collection 接口的
 - 添加单个元素至末尾
 - 添加整个集合元素至末尾
 - 以及 List 接口提供的
 - 在指定位置插入单个元素
 - 在指定位置插入整个集合
 
add(int index, E element)方法
将指定元素插入当前列表中的指定位置,并将当前位置的元素(如果有)和之后的元素向右移动(增加其索引)。
1  |  | 
addAll(int index, Collection c)方法
将指定集合中的所有元素插入到当前列表的指定位置。并将当前位置的元素(如果有)和之后的元素向右移动(增加其索引)。
1  |  | 
3.2 索引相关操作
get(int index)方法
返回此列表中指定位置的元素。
1  |  | 
set()方法
将指定位置的元素替换为指定的元素。
1  |  | 
remove()
删除此列表中指定位置的元素。并将之后的元素向左移位(索引减一)。返回从列表中删除的元素。
1  |  | 
indexOf(Object o)方法
返回此列表中第一次出现的指定元素的索引,如果当前列表不包含该元素,则返回-1。
即:返回最低索引。
1  |  | 
lastIndexOf(Object o)方法
返回此列表中最后一次出现的指定元素的索引,如果当前列表不包含该元素,则返回-1。
即:返回最高索引。
1  |  | 
3.3 其他操作
replaceAll()方法
替换列表中所有满足条件的元素。
1  |  | 
sort()方法
根据指定的比较器的顺序对当前列表进行排序。
如果指定的比较器为 null,则当前列表中的所有元素都必须实现 Comparable 接口,并且应使用元素的自然顺序。列表必须是可修改的,但无需调整大小。
1  |  | 
subList()方法
返回从起始索引(包含)至结束索引(不包含)的子列表。即:包含头不包含尾。
如果开始索引与结束索引相等,则返回空列表。
1  |  | 
listIterator()方法
返回当前列表中元素的 ListIterator 列表迭代器。
1  |  | 
listIterator(int index)方法
从指定索引位置开始,返回当前列表中元素的 ListIterator 列表迭代器。
1  |  | 
四、ListIterator迭代器
java.util.ListIterator 继承自 java.util.Iterator 接口,可实现从双端迭代。该迭代器允许在迭代期间对列表进行修改。
ListIterator 没有当前元素,它的迭代光标位置是位于元素之间的,长度为 n 的列表的迭代器具有 n+1 个可能的索引位置,如下:
1  |  | 
需要注意:remove() 方法和 set(Object) 方法没有根据光标位置进行操作;它们是对 next() 方法或 previous() 方法调用后返回的最后一个光标进行操作。
方法描述
hasNext()方法
如果当前列表迭代器从前向后遍历列表时还有下一个元素,则返回 true。
1  |  | 
next()方法
返回当前列表中的下一个元素并向前移动光标位置。
1  |  | 
hasPrevious()方法
如果当前列表迭代器从后向前遍历列表时还有下一个元素,则返回 true。
1  |  | 
previous()方法
返回当前列表中的上一个元素并向后移动光标位置。
1  |  | 
nextIndex()方法
返回下一个元素的索引。
1  |  | 
previousIndex()方法
返回上一个元素的索引。
1  |  | 
remove()方法
从当前列表中删除 next() 或 previous() 返回的最后一个元素。
此方法只能在每次调用下一次或上一次时进行一次。
只有在最后一次调用 next() 或 previous() 之后没有调用 add(E) 时才能进行此操作。
1  |  | 
set(E e)方法
用指定的元素替换 next() 或 previous() 返回的最后一个元素。
只有在最后一次调用 next() 或 previous() 之后才调用 remove() 和 **add(E)**时,才能进行此调用。
1  |  | 
add(E e)方法
将指定的元素插入当前列表。
元素将紧接在 next() 返回的元素之前插入(如果有),并且在 previous() 返回的元素之后插入(如果有)。
如果当前列表中不包含任何元素,则新元素将成为列表中的唯一元素。
1  |  |