java遍历的所有方法及优缺点

  1. 普通 for 循环

    样子:

java

复制代码
for (int i = 0; i < list.size(); i++) {
    盒子 b = list.get(i);
}

你自己拿着编号 0、1、2... 自己去货架上拿。

优点:

  • 想拿第几个就拿第几个,还能顺手改里面的货。

    缺点:

  • 自己数号码累,数错就"越界"摔地上;对 Set、Map 这类没编号的货架用不了。


  1. 增强 for 循环(for-each)

    样子:

java

复制代码
for (盒子 b : list) {
    扫一下 b;
}

仓库管理员把盒子一个一个递到你手上,你不用管号码。

优点:

  • 代码最少,不会数错号。

    缺点:

  • 他递给你时你不能中途"抽走"某个盒子(删不了),也不知道是第几个。


  1. Iterator(迭代器)

    样子:

java

复制代码
Iterator<盒子> it = list.iterator();
while (it.hasNext()) {
    盒子 b = it.next();
    if (b 是坏的) it.remove(); // 直接扔掉
}

给你一把"智能扫码枪",扫一个出一个,还能顺手把坏的丢垃圾桶。

优点:

  • 边扫边扔安全,不会砸到脚。

    缺点:

  • 要多写几行;只能单向扫,不能回头。


  1. ListIterator(双向扫码枪)

    样子:

java

复制代码
ListIterator<盒子> it = list.listIterator();
while (it.hasNext()) { 正着扫; }
while (it.hasPrevious()) { 倒着扫; }

扫码枪带"倒车"键,可以前后来回扫,还能在任意位置插新盒子。

优点:

  • 能回头、能插货、能改货。

    缺点:

  • 只有 List 货架能用;代码更啰嗦。


  1. JDK 8 的 forEach + Lambda

    样子:

java

复制代码
list.forEach(b -> {
    扫一下 b;
});

管理员直接开传送带,盒子哗哗流过,你站在旁边"盖章"。

优点:

  • 一句话搞定,看着爽。

    缺点:

  • 传送带一旦开动就停不下来(不能 break);想删盒子也删不了。


  1. Stream API(带流水线的高级传送带)

    样子:

java

复制代码
list.stream()
    .filter(b -> b 是好的)
    .map(b -> b 打标签)
    .forEach(b -> 入库);

不但传送,还能自动把坏的踢出去、把盒子贴标签、最后分组装箱,全程不用你动手。

优点:

  • 功能最强大,支持并行(多线程一起干)。

    缺点:

  • 小仓库用就显得"杀鸡用牛刀";调试略麻烦;同样改不了原货架。

场景 用啥
只看看,不删不改 增强 for
要删元素 Iterator
要来回/插元素 ListIterator
要编号 普通 for
想写酷炫一行代码 forEach Lambda
数据量大还要过滤、分组 Stream

"只看不碰用增强 for,要删就用 Iterator,要编号回普通 for,酷炫一行上 Lambda,复杂流水线 Stream 来帮忙。"

相关推荐
小π军1 分钟前
STL之multiset 常见API介绍
数据结构·c++·算法
直奔標竿1 分钟前
Java开发者AI转型第十三课!知识库终局方案:Spring AI Vector Store架构演进与ETL全链路入库实战
java·人工智能·后端·spring
Shan12051 分钟前
浅谈:从经典算法到实战优化的案例分析
数据结构
MarkHD2 分钟前
调度、监控与部署:Python自动化任务全栈实践
开发语言·python·自动化
XiYang-DING3 分钟前
【Java EE】阻塞队列(BlockingQueue)
java·java-ee
Resistance丶未来3 分钟前
DeepSeek-V4 新手快速上手指南
数据结构·python·gpt·算法·机器学习·claude·claude 4.6
山甫aa3 分钟前
多叉树定义与遍历-----从零开始的数据结构
开发语言·c++·二叉树·多叉树
永远睡不够的入7 分钟前
C++11新特性(2):深入 C++ 参数传递黑盒:从引用折叠到完美转发,再到可变参数模板
开发语言·c++
AndreasEmil9 分钟前
基于多设计模式的抽奖系统 - 测试报告
java·selenium·设计模式·postman
无限进步_12 分钟前
【C++】寻找数组中出现次数超过一半的数字:三种解法深度剖析
开发语言·c++·git·算法·leetcode·github·visual studio