讲师中心 微信公众号
AI工具推荐 视频效率加速

在Java中遍历集合有哪些常见方式_Java集合遍历方法解析

大枫酱_4831

大枫酱_4831

发布时间:2026-01-21 15:35:10

|

900人浏览过

|

来源于php中文网

原创

for-each循环最安全常用,适用于只读遍历;需删除元素时必须用Iterator.remove();传统for索引循环仅适用于List且注意性能差异;Lambda forEach适合简单操作,复杂逻辑应避免。

在java中遍历集合有哪些常见方式_java集合遍历方法解析

用 for-each 循环遍历 Collection 最安全也最常用

绝大多数情况下,for-each(增强型 for)是首选:它简洁、不易出错、自动处理迭代器逻辑。适用于所有实现 Iterable 的集合(如 ArrayList、HashSet、LinkedList)。

注意它底层调用的是 iterator(),所以遍历时**不能直接调用 collection.remove()**,否则抛 ConcurrentModificationException。

for (String item : list) {
    System.out.println(item);
    // ❌ 不能写 list.remove(item); —— 会触发 fail-fast
}
  • 适合只读遍历或已知不修改集合结构的场景
  • 无法获取当前索引,也不支持反向遍历
  • 对 Map 需先转成 entrySet()、keySet() 或 values()

用 Iterator 手动控制遍历并安全删除元素

当需要在遍历中动态删除匹配项时,必须用 Iterator 的 remove() 方法——这是唯一被允许的删除方式。

Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String item = it.next();
    if ("target".equals(item)) {
        it.remove(); // ✅ 安全删除
    }
}
  • it.remove() 只能紧跟在 it.next() 之后调用一次
  • 不能用于数组或基本类型数组;仅适用于 Collection 子类
  • 部分并发集合(如 CopyOnWriteArrayList)的 Iterator 不支持 remove()

用传统 for 索引循环只适用于 List 实现

get(i) 是 List 接口定义的方法,所以只有 ArrayList、LinkedList 等才支持下标访问。但性能差异很大:

Java Maven Common
Java Maven Common

Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。

下载

立即学习“Java免费学习笔记(深入)”;

  • ArrayList.get(i) 是 O(1),适合随机访问
  • LinkedList.get(i) 是 O(n),每次都要从头/尾跳转,遍历时应避免
for (int i = 0; i < list.size(); i++) {
    String item = list.get(i); // ✅ 对 ArrayList 高效;❌ 对 LinkedList 效率低
    System.out.println(item);
}

另外,若在循环中增删元素,size() 和索引容易不同步,极易漏项或越界。

forEach() + Lambda 适合简单操作,但有作用域限制

JDK 8 引入的 Collection.forEach(Consumer) 写法简洁,但本质仍是内部调用 Iterator,因此同样不支持遍历时修改集合。

list.forEach(item -> {
    System.out.println(item);
    // ❌ 不能写 list.remove(item);
});
  • Lambda 表达式里只能访问 final 或“事实上 final”的变量
  • 无法使用 break 或 continue 控制流程(需改用传统循环)
  • 异常处理麻烦:Lambda 不能抛受检异常,必须包装成运行时异常

真正复杂的逻辑(比如带状态计数、条件中断、嵌套操作),别硬套 forEach,老实用 Iterator 或传统循环。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

778

2025.12.04

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

778

2025.12.04

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

2780

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

787

2025.10.24

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

787

2025.10.24

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

1011

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

345

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

534

2026.01.05

剧云故事大纲与分场规划教程
剧云故事大纲与分场规划教程

本专题讲解剧云梗概与多级大纲功能,覆盖全局、分集、分场结构生成,以及主线冲突、剧情节点和场次顺序调整。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn