如何在Java中使用增强for循环_Java遍历集合语法说明
发布时间 - 2026-01-30 00:00:00 点击率:次增强for循环仅适用于Iterable集合或数组,语法为for (Type e : coll),不可修改集合结构,否则抛ConcurrentModificationException;需索引或删除时应选普通for或显式Iterator。
增强for循环的语法结构和适用范围
Java增强for循环(for-each)本质是编译器语法糖,底层仍调用Iterator或数组索引访问。它**只能用于实现了Iterable接口的集合类(如ArrayList、HashSet)或数组**,不能用于普通对象或未实现该接口的自定义容器。
基本写法:
for (Type element : collectionOrArray) { ... }
-
Type必须与集合/数组元素类型兼容,否则编译报错Incompatible types - 遍历过程中无法获取当前索引,也不能在循环体内修改集合结构(如
remove()),否则抛ConcurrentModificationException - 对数组使用时,不支持反向遍历或跳步,且无法区分是原始数组还是包装后的
List
常见错误:修改集合导致ConcurrentModificationException
增强for循环隐式使用迭代器,但不暴露Iterator.remove()方法。直接在循环中调用list.remove()或map.remove()会触发快速失败机制。
正确做法是改用显式Iterator:
Iteratorit = list.iterator(); while (it.hasNext()) { String s = it.next(); if (s.startsWith("A")) { it.remove(); // 安全删除 } }
- 不要写
for (String s : list) { if (...) list.remove(s); }—— 这几乎必崩 - 若只需过滤,优先用
Collection.removeIf()(Java 8+):list.removeIf(s -> s.startsWith("A")) - 对
Map遍历时想删键值对,必须遍历entrySet()并用Iterator.remove(),不能遍历keySet(后调
)
map.remove(key)
增强for vs 普通for:什么时候该选哪个
增强for简洁安全,但能力有限;普通for(含索引或Iterator)更灵活,代价是代码略长。
- 需要索引(如“第几个元素”“前后元素比较”)→ 必须用普通
for (int i = 0; i - 遍历
ArrayList且需随机访问 → 普通for性能略优(避免每次调iterator().next()) - 遍历
LinkedList或HashSet→ 增强for更合理(内部仍是迭代器,且避免了get(i)的O(n)开销) - 仅读取、无修改、无需索引 → 增强for语义清晰,首选
泛型擦除下容易忽略的类型陷阱
增强for的Type声明受泛型擦除影响,运行时无法校验。如果集合实际装了错误类型,会在循环体第一行赋值时抛ClassCastException。
ArrayList rawList = new ArrayList();
rawList.add("hello");
rawList.add(123);
// 编译通过,但运行时在第二次迭代时崩溃
for (String s : rawList) {
System.out.println(s.length()); // 第一次OK,第二次抛异常
}
- 永远用带泛型的集合声明:
ArrayListlist = new ArrayList(); - 避免混用原始类型(raw type)和泛型,尤其在跨模块传参时
- 若必须处理未知类型集合,增强for前先做
instanceof检查,或改用Object接收再转型
# java
# 键值对
# String
# Object
# if
# for
# int
# 循环
# 接口
# Collection
# 泛型
# map
# 并发
# 对象
# 重构
# 遍历
# 迭代
# 擦除
# 几个
# 也不
# 什么时候
# 只需
# 适用于
# 会在
# 能在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
如何在建站之星绑定自定义域名?
独立制作一个网站多少钱,建立网站需要花多少钱?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
如何用景安虚拟主机手机版绑定域名建站?
非常酷的网站设计制作软件,酷培ai教育官方网站?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
用yum安装MySQLdb模块的步骤方法
无锡营销型网站制作公司,无锡网选车牌流程?
香港网站服务器数量如何影响SEO优化效果?
微信小程序 wx.uploadFile无法上传解决办法
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
JavaScript如何实现路由_前端路由原理是什么
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
Laravel如何实现多对多模型关联?(Eloquent教程)
如何自定义建站之星模板颜色并下载新样式?
如何在阿里云部署织梦网站?
LinuxShell函数封装方法_脚本复用设计思路【教程】
如何在香港免费服务器上快速搭建网站?
如何在新浪SAE免费搭建个人博客?
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
如何在服务器上配置二级域名建站?
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
b2c电商网站制作流程,b2c水平综合的电商平台?
如何确保西部建站助手FTP传输的安全性?
Laravel中的Facade(门面)到底是什么原理
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
Laravel怎么清理缓存_Laravel optimize clear命令详解
C++时间戳转换成日期时间的步骤和示例代码
打造顶配客厅影院,这份100寸电视推荐名单请查收
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
使用Dockerfile构建java web环境
JavaScript如何实现倒计时_时间函数如何精确控制
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
如何快速查询域名建站关键信息?
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
敲碗10年!Mac系列传将迎来「触控与联网」双革新
canvas 画布在主流浏览器中的尺寸限制详细介绍
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
javascript中闭包概念与用法深入理解
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何在云服务器上快速搭建个人网站?


