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 |
|