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
。
引用说明
通过以上方法,可高效安全地读取Java List,根据需求选择合适方式,结合异常处理和性能优化,能显著提升代码质量。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/41042.html