【Java集合框架】3 - 3 List 集合
§3-3 List 集合
目录
3-3.1 List 集合的特点
List 是 Collection 中的一个接口,该系列集合属于单列集合,其特点为:
- 有序:数据存取的顺序一致;
- 可重复:允许存放重复的元素;
- 有索引:可以通过索引操作元素;
List 集合中的方法:
- 由于
List是Collection的子接口,因此其继承了所有Collection中的方法; - 由于
List集合具有索引,该集合具有很多与索引有关的方法;
与索引有关的方法:(增删改查)
| 方法 | 描述 |
|---|---|
void add(int index, E element) |
在此列表中的指定位置插入指定元素 |
E remove(int index) |
删除此列表中指定位置的元素,且返回该元素 |
E set(int index, E element) |
修改此列表中指定位置的元素,并返回该元素 |
E get(int index) |
返回此列表中指定位置的元素 |
注意:
-
若使用了整型的包装类创建
List,调用remove()方法时,传入参数不会自动装拆箱;这一点对于任何具有重载的方法都适用,会优先调用实参与形参类型一致的重载;
3-3.2 List 的遍历方式
由于 List 继承于 Collection,父接口所适用的遍历方式对于 List 也同样适用。
但 List 也存在其独有的遍历方式。
3-3.2.1 使用 Collection 的遍历方式
示例1:迭代器遍历
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
list.add("and");
list.add("Java");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
示例2:增强 for 循环
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
list.add("and");
list.add("Java");
for (String s : list) {
System.out.println(s);
}
}
示例3:forEach 结合 Lambda 表达式
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
list.add("and");
list.add("Java");
list.forEach(s -> System.out.println(s));
}
3-3.2.2 普通 for 循环
由于 List 具有索引,可以使用普通 for 遍历。
示例:
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
list.add("and");
list.add("Java");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
3-3.2.3 列表迭代器
ListIterator<E> 是一个接口,位于 java.util 包下,继承自 Iterator<E>。
方法列表:
| 方法 | 描述 |
|---|---|
ListIterator<E> listIterator() |
返回列表迭代器对象,默认指向起始处 |
ListIterator<E> listIterator(int index) |
返回列表迭代器对象,并指定起始位置 |
boolean hasNext() |
正向遍历该列表时,判断该列表是否具有更多元素 |
E next() |
返回下一元素,并后移迭代器对象 |
boolean hasPrevious() |
逆向遍历该列表时,判断该列表是否具有更多元素 |
E previous() |
返回上一个元素,并将迭代器前移 |
void add(E e) |
将指定元素添加到列表中(可选操作) |
void remove() |
删除迭代器返回的最后一个元素(可选操作) |
void set(E e) |
将迭代器返回的最后一个元素替换为指定元素 |
注意:
- 若无更多元素(指向空),尝试返回该位置的元素会抛出异常
NoSuchElementException; - 由于有
previous()方法,可以通过逆向遍历列表复位列表迭代器; - 遍历过程中,使用集合的方法增删改元素是不允许的,会抛出异常
ConcurrentModificationException; - 不同于
Collection迭代器,该迭代器支持增添、修改元素;
浙公网安备 33010602011771号