参考回答
List 集合是 Java 中常用的集合类型,支持多种遍历方式。以下是常见的 List 遍历方法:
增强型 for 循环(for-each)
普通 for 循环
Iterator 遍历
ListIterator 遍历
Stream API(Java 8+)
forEach 方法(Java 8+)
详细讲解与示例
1. 增强型 for 循环
特点:
简洁易用。
遍历过程中不需要显式管理索引。
适用于读取元素(不可修改集合结构)。
示例:
import java.util.ArrayList;
import java.util.List;
public class ForEachLoop {
public static void main(String[] args) {
List
list.add("A");
list.add("B");
list.add("C");
for (String item : list) {
System.out.println(item);
}
}
}
注意事项:
不可直接在循环中调用 list.remove() 或 list.add(),否则会抛出 ConcurrentModificationException。
2. 普通 for 循环
特点:
可以通过索引访问元素。
适合需要索引操作的场景,例如根据索引删除或替换元素。
示例:
import java.util.ArrayList;
import java.util.List;
public class ForLoop {
public static void main(String[] args) {
List
list.add("A");
list.add("B");
list.add("C");
for (int i = 0; i < list.size(); i++) {
System.out.println("Index " + i + ": " + list.get(i));
}
}
}
注意事项:
删除或添加元素时需要调整索引或使用反向遍历,避免跳过元素或引发异常。
3. Iterator 遍历
特点:
提供 hasNext() 和 next() 方法遍历集合。
可通过 Iterator 的 remove() 方法安全地删除元素。
示例:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorTraversal {
public static void main(String[] args) {
List
list.add("A");
list.add("B");
list.add("C");
Iterator
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}
}
}
安全删除示例:
Iterator
while (iterator.hasNext()) {
String item = iterator.next();
if ("B".equals(item)) {
iterator.remove(); // 正确删除,不会抛出异常
}
}
注意事项:
不要在迭代过程中直接使用 list.remove(),否则会抛出 ConcurrentModificationException。
4. ListIterator 遍历
特点:
是 Iterator 的扩展,用于双向遍历 List。
提供方法:
hasPrevious() 和 previous():支持反向遍历。
add(E e) 和 set(E e):支持插入和替换元素。
示例:
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorTraversal {
public static void main(String[] args) {
List
list.add("A");
list.add("B");
list.add("C");
ListIterator
// 正向遍历
while (listIterator.hasNext()) {
System.out.println("Next: " + listIterator.next());
}
// 反向遍历
while (listIterator.hasPrevious()) {
System.out.println("Previous: " + listIterator.previous());
}
}
}
5. 使用 Stream API(Java 8+)
特点:
支持声明式编程,代码简洁。
可以结合 filter()、map()、forEach() 等方法实现复杂操作。
适合需要对集合进行流式处理的场景。
示例:
import java.util.ArrayList;
import java.util.List;
public class StreamAPITraversal {
public static void main(String[] args) {
List
list.add("A");
list.add("B");
list.add("C");
list.stream().forEach(System.out::println);
}
}
带条件的遍历:
list.stream()
.filter(item -> !"B".equals(item)) // 过滤掉 "B"
.forEach(System.out::println);
6. 使用 forEach 方法(Java 8+)
特点:
List 集合继承了 Iterable 接口,因此支持 forEach 方法。
与 Stream 类似,但语法更简单,直接遍历每个元素。
示例:
import java.util.ArrayList;
import java.util.List;
public class ForEachMethodTraversal {
public static void main(String[] args) {
List
list.add("A");
list.add("B");
list.add("C");
list.forEach(item -> System.out.println(item));
}
}
结合方法引用:
list.forEach(System.out::println);
各遍历方式的对比
方式
特点
适用场景
增强型 for 循环
简洁易用,不需要手动管理索引。
仅需要读取元素时使用。
普通 for 循环
支持按索引访问,可以灵活操作索引。
需要索引操作,或可能删除/替换元素。
Iterator 遍历
支持安全删除元素,避免并发修改异常。
需要删除元素时,推荐使用。
ListIterator 遍历
支持双向遍历,同时支持添加或修改元素。
需要双向遍历或插入/替换元素时使用。
Stream API
声明式编程,支持复杂的流式操作,如过滤、映射、排序等。
需要流式处理集合时使用。
forEach 方法
简洁的遍历方式,适合直接操作每个元素。
简单的逐一操作或结合方法引用时使用。
总结
List 集合的常见遍历方式有多种,选择合适的方式取决于具体需求:
仅遍历:增强型 for 循环或 forEach 方法更简单。
需要索引:使用普通 for 循环。
安全删除:优先使用 Iterator 的 remove()。
双向遍历:使用 ListIterator。
复杂操作:推荐使用 Stream API。
帅地训练营会员
打赏
收藏
海报挣佣金
推广链接