List 作为 Collection 的重要子接口,因具备有序、可重复、有索引的特性,在 Java 开发中被广泛使用。它不仅继承了 Collection 的所有方法,还新增了一系列基于索引的操作,让元素操作更灵活。本文将详细介绍 List 集合的核心方法及五种遍历方式,帮助你熟练掌握其用法。
一、List 集合的核心特性
与 Set 系列集合相比,List 的独特之处在于:
- 有序性:元素的存储顺序与取出顺序完全一致
- 可重复性:允许存储相同的元素(通过
equals()判断) - 索引支持:元素有明确的位置索引(从 0 开始),可通过索引直接操作元素
常见实现类:ArrayList(数组实现,查询快)、LinkedList(链表实现,增删快)、Vector(线程安全,效率较低)。
二、List 独有的索引操作方法
由于支持索引,List 新增了一系列通过索引操作元素的方法,这是其与其他 Collection 子接口的核心区别:
| 方法 | 功能 | 示例 |
|---|---|---|
add(int index, E element) | 在指定索引插入元素 | list.add(1, "插入元素") → 索引 1 处插入新元素,后续元素后移 |
remove(int index) | 删除指定索引元素,返回被删除元素 | String removed = list.remove(0) → 删除索引 0 的元素 |
set(int index, E element) | 替换指定索引元素,返回被替换元素 | String old = list.set(2, "新值") → 替换索引 2 的元素 |
get(int index) | 获取指定索引的元素 | String elem = list.get(1) → 获取索引 1 的元素 |
代码示例:
List<String> list = new ArrayList<>();
list.add("牢大");
list.add("牢二");
list.add("牢三");
System.out.println(list); // [牢大, 牢二, 牢三]
// 插入元素(索引1处)
list.add(1, "我是插入的");
System.out.println(list); // [牢大, 我是插入的, 牢二, 牢三]
// 删除索引1的元素
list.remove(1);
System.out.println(list); // [牢大, 牢二, 牢三]
// 替换索引0的元素
list.set(0, "我是替换的");
System.out.println(list); // [我是替换的, 牢二, 牢三]
// 获取索引0的元素
System.out.println(list.get(0)); // 我是替换的
三、List 集合的五种遍历方式
List 支持多种遍历方式,适用于不同场景,以下是详细说明:
1. 迭代器(Iterator)遍历
继承自 Collection 的通用遍历方式,通过iterator()获取迭代器对象:
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next(); // 获取元素并移动指针
System.out.println(s);
}
特点:可在遍历中通过it.remove()删除元素,适用于需要删除操作的场景。
2. 列表迭代器(ListIterator)遍历
List 独有的迭代器,支持向前 / 向后遍历和添加元素:
ListIterator<String> lit = list.listIterator();
while (lit.hasNext()) { // 向后遍历
String s = lit.next();
System.out.println(s);
}
// 额外支持向前遍历(需先移动到末尾)
while (lit.hasPrevious()) {
String s = lit.previous();
System.out.println(s);
}
优势:可在遍历中通过lit.add(E e)添加元素,功能比普通迭代器更丰富。
3. 增强 for 循环遍历
简化版迭代器,语法简洁,适合仅需读取元素的场景:
for (String s : list) {
System.out.println(s);
}
注意:遍历中不能修改集合结构(添加 / 删除元素),否则会抛出异常。
4. Lambda 表达式遍历
JDK8 + 新增的遍历方式,代码最简洁,体现函数式编程思想:
list.forEach(s -> System.out.println(s));
适用场景:简单遍历逻辑,无需复杂操作时优先使用。
5. 普通 for 循环遍历
利用索引遍历,适合需要操作索引的场景:
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i)); // 通过get(i)获取元素
}
优势:可通过索引灵活控制遍历顺序(如倒序遍历),支持中途修改索引值。
四、总结
List 集合因支持索引而具备极高的灵活性,其独有的add(int index)、remove(int index)、set(int index)、get(int index)方法让元素操作更精准。五种遍历方式各有侧重:
- 需修改集合(增删元素)→ 用
ListIterator - 简单读取 → 用增强 for 循环或 Lambda 表达式
- 依赖索引操作 → 用普通 for 循环
- 通用遍历 → 用
Iterator
4574

被折叠的 条评论
为什么被折叠?



