java .foreach数组遍历_foreach遍历ArrayList和数组

java .foreach数组遍历_foreach遍历ArrayList和数组遍历ArrayList的方式有迭代器,foreach循环,get(i)等方式。其中迭代器和get方法都有具体的代码可以看到。foreach循环是怎么实现的呢?下面通过反编译class的方式来看看JAVA是如何处理foreach遍历ArrayList、数组的。先说结论:foreach遍历list底层还是使用的迭代器;foreach遍历数组还是传统的i=0到i=length-1遍历,只是写法上封装成f…

大家好,又见面了,我是你们的朋友全栈君。

遍历ArrayList的方式有迭代器,foreach循环,get(i)等方式。其中迭代器和get方法都有具体的代码可以看到。foreach循环是怎么实现的呢?

下面通过反编译class的方式来看看JAVA是如何处理foreach遍历ArrayList、数组的。

先说结论:foreach遍历list底层还是使用的迭代器;foreach遍历数组还是传统的i=0到i=length-1遍历,只是写法上封装成foreach的形式

拓展:foreach遍历list时不能调用remove方法的原因

因为迭代器遍历过程中,不允许list被修改(删除、增加元素),具体做法是在迭代器对象中记录迭代器生成时list的modCount字段。在调用next时回去校验迭代器保持的expectedModCount是不是和list的modCount相等,不相等的话就会抛出异常ConcurrentModificationException。所以使用foreach循环时不能删除list元素,也不能添加(也会改变modCount)。若要在遍历过程中进行删除可以使用迭代器遍历法,并使用iterator.remove()方法,这儿方法会删除上次刚next()跳过的元素,不能在调用next前调用,否则也会抛异常IllegalStateException。

原始代码

List list = new ArrayList();

for(int i = 0; i < 10; i++)

list.add(i);

for (Integer i : list) {

System.out.println(i);

}

int[] arr = {1,2,3,4,5};

for (int i : arr) {

System.out.println(i);

}

先将上述代码编译为class,再反编译得到:

Iterator var7 = var1.iterator();

while(var7.hasNext()) {

Integer var3 = (Integer)var7.next();

System.out.println(var3);

}

int[] var8 = new int[]{1, 2, 3, 4, 5};

int[] var9 = var8;

int var4 = var8.length;

for(int var5 = 0; var5 < var4; ++var5) {

int var6 = var9[var5];

System.out.println(var6);

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163094.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mac双系统安装方法_macbook如何安装双系统

    mac双系统安装方法_macbook如何安装双系统Mac上安装双系统(传统BootCamp傻瓜式)图文教程写在前面:Mac用户在使用过程中,多少有的时候还会使用Windows,想装一个咋办?找某宝需要花钱150元,看这篇文章,十几分钟看明白,自己动手丰衣足食!所以本文将以图文教程教你如何安装双系统,开机随意选择,想用什么用什么!尽管我不是很喜欢用Windows…….个人建议阅读完本文章,彻底看明白之后再对照操作安装前期准备工作:需准备至少8Gb空优盘一个,不是空的可以提前备份一下,制作启动盘会格式化优盘,请注意!制作启动盘…

  • 树状数组

    树状数组

  • PO模式思想「建议收藏」

    PO模式思想「建议收藏」1.怎么判断测试有没有通过?断言成功代表用例成功,断言失败代表用例失败。存结果,是因为如果这个用例失败了,还想看下接口当中到底给你返回的数据是什么,失败在哪里。页面的断言是非常精细的,说…

  • 苹果手机各种尺寸详细表以及iPhoneX、iPhone 11、iPhone 12、iPhone 13 屏幕适配,状态栏高度问题「建议收藏」

    苹果手机各种尺寸详细表以及iPhoneX、iPhone 11、iPhone 12、iPhone 13 屏幕适配,状态栏高度问题「建议收藏」iPhone设备物理分辨率是硬件所支持的,逻辑分辨率是软件可以达到的。代数 设备 操作系统 逻辑分辨率(point) 物理分辨率(pixel) 屏幕尺寸(对角线长度) 缩放因子 iPhone 第一代 iPhone2G iOS1 320×480 480x…

  • 总结:监控系统的7大作用

    总结:监控系统的7大作用一、介绍二、详解 实时采集监控数据:包括硬件、操作系统、中间件、应用程序等各个维度的数据。 实时反馈监控状态:通过对采集的数据进行多维度统计和可视化展示,能实时体现监控对象的状态是正常还是异常。 预知故障和告警:能够提前预知故障风险,并及时发出告警信息。 辅助定位故障:提供故障发生时的各项指标数据,辅助故障分析和定位。 辅助性能调优:为性能调优提供数据支持,比如慢SQL,接口响应时间等。 辅助容量规划:为服务器、中间件以及应用集群的容量规划

  • 白嫖免费域名+免费服务器[通俗易懂]

    点击蓝字关注我们免费注册地址https://byet.host/不要翻墙是真的免费吗?byethost.com是一个老牌的免费空间商,从2006年起就开始提供免费空间了,其免费服务非常稳…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号