List集合有哪些常见的遍历方式?

参考回答

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 = new ArrayList<>();

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 = new ArrayList<>();

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 = new ArrayList<>();

list.add("A");

list.add("B");

list.add("C");

Iterator iterator = list.iterator();

while (iterator.hasNext()) {

String item = iterator.next();

System.out.println(item);

}

}

}

安全删除示例:

Iterator iterator = list.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 = new ArrayList<>();

list.add("A");

list.add("B");

list.add("C");

ListIterator listIterator = list.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 = new ArrayList<>();

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 = new ArrayList<>();

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。

帅地训练营会员

打赏

收藏

海报挣佣金

推广链接