Skip to content

Java遍历集合的"十八般武艺"大比拼 🥋

各位Java剑客们好!今天我们要来一场集合遍历的武林大会,看看增强for循环、普通for循环、迭代器、foreach这些"兵器"各有什么绝招!

1. 普通for循环 - 老派但可靠的老爷爷 👴

java
for(int i=0; i<list.size(); i++){
    System.out.println(list.get(i));
}

特点:

  • 像个固执的老爷爷,非要自己数着来
  • 需要知道集合大小(size)
  • 可以通过索引随机访问元素
  • 在ArrayList等随机访问集合中效率高
  • 但在LinkedList中就是自虐行为(每次get(i)都要从头遍历)

**底层原理:**就是老老实实的从0数到size-1,每次用get方法获取元素。

2. 迭代器(Iterator) - 专业的集合导游 🚩

java
Iterator<String> it = list.iterator();
while(it.hasNext()){
    String item = it.next();
    System.out.println(item);
}

特点:

  • 像个专业的导游,知道集合里每个元素的位置
  • 统一了各种集合的遍历方式
  • 可以在遍历时安全地删除元素(it.remove())
  • 有些集合(如ConcurrentHashMap)有特殊的fail-fast机制

底层原理: 集合内部实现Iterator接口,维护一个游标记录当前位置。hasNext()检查是否还有元素,next()移动游标并返回元素。

3. 增强for循环(foreach) - 语法糖小甜甜 🍬

java
for(String item : list){
    System.out.println(item);
}

特点:

  • 表面甜美简单,底层还是调用迭代器
  • 编译后会转换成Iterator遍历方式
  • 代码简洁,但无法获取索引
  • 遍历时不能修改集合(会抛ConcurrentModificationException)

底层原理: 编译器会把这段代码转换成使用Iterator的等效代码,所以本质上和迭代器遍历是一样的。

4. forEach()方法 - 时髦的函数式小子 🕶️

java
list.forEach(item -> System.out.println(item));

特点:

  • Java 8引入的时髦方法
  • 接受一个Consumer函数式接口
  • 可以配合方法引用使用(list.forEach(System.out::println))
  • 并行流中表现优秀

**底层原理:**内部也是使用迭代器,但是以函数式的方式呈现。

5. 流式操作(Stream) - 高端大气上档次 🚀

java
list.stream().forEach(System.out::println);

特点:

  • 不是单纯的遍历,而是一整套数据处理流水线
  • 可以轻松实现过滤、映射、归约等操作
  • 支持并行处理
  • 延迟执行,只有遇到终端操作才会真正执行

底层原理: 比较复杂,涉及Spliterator分割数据源,管道操作等。

性能大比拼 🏎️

遍历方式ArrayListLinkedListHashSet
普通for循环⚡⚡⚡⚡⚡🐢🐢🐢🐢🐢不支持
迭代器⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡
增强for循环⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡
forEach()⚡⚡⚡⚡⚡⚡⚡⚡⚡
Stream⚡⚡⚡⚡⚡⚡

使用场景指南 📋

  1. 需要索引 ➡️ 普通for循环
  2. 遍历时可能删除元素 ➡️ 迭代器
  3. 代码简洁优先 ➡️ 增强for循环
  4. 函数式编程风格 ➡️ forEach()或Stream
  5. 大数据量并行处理 ➡️ Stream.parallel()

趣味冷知识 ❄️

  • 增强for循环在Java中被称为"for-each循环",但官方文档其实叫"enhanced for statement"
  • 迭代器的remove()方法是唯一安全地在遍历时删除元素的方式
  • Java 5之前,程序员只能用普通for循环或迭代器,生活多么"美好"啊!
  • 使用Stream时,如果不加.parallel(),它就是个"有钱但低调的富豪" - 有能力但不炫耀

总结 🎯

选择哪种遍历方式,就像选择用什么交通工具:

  • 普通for循环 - 骑自行车,完全掌控但费力
  • 迭代器 - 坐公交,固定路线但可靠
  • 增强for循环 - 打车,省心但花钱
  • forEach() - 坐地铁,现代高效
  • Stream - 坐飞机,长途旅行最佳选择

记住:没有最好的,只有最合适的!根据场景选择你的"武器"吧!

技术漫游

本站访客数 人次 本站总访问量