Java 每日一题: for 与 foreach 的区别 ?

for 循环:是最基本的循环结构,可以通过初始化语句、循环条件和迭代语句来控制循环的执行。

foreach 循环(也称为增强型 for 循环):用于遍历集合或数组中的元素,简化了遍历过程,没有显式地控制索引,而是直接访问每一个元素。

1)for、foreach 都能遍历集合或者数组,在面对复杂逻辑的情况下,for 的效率更高。

2)for 可以删除元素;foreach 不能,只能通过迭代器的 remove去删除。

3)for 可以修改集合里面的元素/属性;foreach 不能修改元素,只能修改元素里面的属性。

4)for 适用于自定义步长、需要获取索引的场景; 适用于需要访问每个元素而不关心元素索引的场景。

foreach 不能删除元素的原因如下:

foreach 内部使用迭代器,它会在每次遍历会记录 List 集合内部的 modcount 作为预期值,即迭代器自己的 expectedModCount,如果直接使用 list.remove 则是 List 集合内部的 modcount 会自增,而期望值没变,则会抛出异常 ConcurrentModificationException。

示例代码(错误的方式):

java 复制代码
List<String> list = new ArrayList<>(Arrays.asList("one", "two", "three"));
for (String item : list) {
    if ("two".equals(item)) {
        list.remove(item); // 这将抛出 ConcurrentModificationException
    }
}

示例代码(正确的方式):

java 复制代码
List<String> list = new ArrayList<>(Arrays.asList("one", "two", "three"));
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String item = it.next();
    if ("two".equals(item)) {
        it.remove(); // 安全删除
    }
}

foreach 不能修改元素的原因也是如此。

相关推荐
wno7047 小时前
postgresSQL压缩版安装与基本命令
数据库·postgresql
白帽攻防录9 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
聚美智数9 小时前
智能结构化识别-图片结构解析-图像结构化解析-照片结构化解析
android·java·数据库
十年Java程序媛9 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
瀚高PG实验室9 小时前
瀚高数据库常用系统表查询入门指南(附常用SQL)
数据库·sql·postgresql·瀚高数据库
我是人✓9 小时前
SpringBoot静态资源映射揭秘
java·spring boot·后端
全栈弄潮儿9 小时前
Python实战第7期:字典与集合
后端·python·编程语言
ben9518chen9 小时前
mysql数据库基本操作
数据库·mysql
2603_965148119 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
码事漫谈9 小时前
DeepSeek 又更新!但怎么有个分数往下掉?
后端