上一篇
Java中读取List主要通过索引访问和迭代器遍历两种方式:,1. **索引访问**:使用
list.get(index)直接获取指定位置的元素,2. **
迭代器遍历**:通过
for-each循环(
for(E e : list))或
Iterator对象顺序访问元素,这两种方法适用于ArrayList、LinkedList等List实现类,读取时需注意索引越界问题。
在Java中,List是一种有序集合,用于存储和操作元素序列,读取List的核心是遍历或访问其元素,以下是6种常用方法及详细示例:
基础for循环(通过索引读取)
List<String> list = Arrays.asList("A", "B", "C");
for (int i = 0; i < list.size(); i++) {
String element = list.get(i); // 通过索引获取元素
System.out.println(element);
}
// 输出:A B C
适用场景:需根据索引操作元素(如修改指定位置数据)。
增强for循环(foreach)
for (String element : list) {
System.out.println(element); // 直接获取元素值
}
优势:代码简洁,无需处理索引,避免越界错误。

迭代器(Iterator)
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next(); // 逐个读取元素
System.out.println(element);
// iterator.remove(); // 安全删除当前元素
}
关键点:适合在遍历中删除元素(避免ConcurrentModificationException异常)。
ListIterator(双向遍历)
ListIterator<String> listIterator = list.listIterator();
// 正向遍历
while (listIterator.hasNext()) {
System.out.println(listIterator.next());
}
// 反向遍历(需先移动到末尾)
while (listIterator.hasPrevious()) {
System.out.println(listIterator.previous());
}
适用场景:需双向遍历或修改List(如替换元素)。

Java 8 Stream API
list.stream()
.filter(e -> e.startsWith("A")) // 过滤元素
.forEach(System.out::println); // 输出:A
优势:支持函数式编程(过滤、映射等复杂操作)。
forEach()方法 + Lambda
list.forEach(element -> System.out.println(element)); // 或简写为: list.forEach(System.out::println);
特点:代码最简洁,适用于简单遍历。

注意事项
- 并发修改异常:
使用for或foreach遍历时,直接调用list.remove()会抛出ConcurrentModificationException,需用Iterator.remove()替代。 - 性能考虑:
ArrayList:get(i)效率高(O(1))LinkedList:避免用get(i)(O(n)),优先用迭代器或foreach。
- 空指针处理:
遍历前检查List是否为空:if (list != null)
如何选择?
| 方法 | 适用场景 |
|---|---|
| 基础for循环 | 需索引操作元素时 |
| 增强for循环 | 简单遍历(最常用) |
| Iterator/ListIterator | 遍历中删除或修改元素 |
| Stream API | 需过滤、映射等复杂操作 |
| forEach() + Lambda | 简洁遍历(Java 8+) |
最佳实践:优先使用
增强for循环或forEach(),需修改元素时选Iterator,复杂数据处理用Stream API。
引用说明
- Oracle官方文档:List接口
- Java Collections Framework指南
- Effective Java(第3版)Item 46:优先使用Stream处理数据
通过以上方法,可高效安全地读取Java List,根据需求选择合适方式,结合异常处理和性能优化,能显著提升代码质量。
