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);

}

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux挂载磁盘教程「建议收藏」

    linux挂载磁盘教程「建议收藏」本文中的磁盘/dev/sdb为笔者测试服务器上的命名,在您的服务器中可能是/dev/xdb、/dev/vdb、/dev/xvdb等等请根据实际情况进行修改.1、创建挂载目录mkdir-p/www2、确认是否没有分区的磁盘,如下图,没有分区的磁盘是/dev/sdb,在您的服务器中可能是/dev/vdb,请注意按照实际名称修改fdisk-l3、为磁盘分区,若已分区,可跳过fdisk/dev/sdb4、输入n开始创建分区5、输…

    2022年6月19日
    76
  • flash视频器播放器代码

    flash视频器播放器代码flash视频器播放器代码代码整理:

    2022年7月3日
    20
  • 硬件知识汇总

    硬件知识汇总硬件知识1、电源类1.1 电源基础各种“地”——各种“GND”板载电源设计规范电源环路稳定性评价方法深入芯片内部,理解去耦电容的作用减小DC/DC变换器中的接地反弹——一些接地要点开关电源中的小启示电源相关的测试去耦电容的选择、容值计算和布局布线可充电电池将被超级电容取代电容去耦原理(解释十分透彻)地线要短——测试开关电源纹波时权衡电源与PCB设计极点是男人,零点是女人开关电源仿真(sab…

    2022年7月22日
    10
  • Render,RenderChildren,RenderControl

    Render,RenderChildren,RenderControlprotectedinternalvirtualvoidRender(HtmlTextWriterwriter){this.RenderChildren(writer);}protectedinternalvirtualvoidRenderChildren(HtmlTextWriterwriter){ICollectionchildren=(th…

    2022年7月20日
    9
  • 计算机基础进制转换(二进制、八进制、十进制、十六进制)[通俗易懂]

    计算机基础进制转换(二进制、八进制、十进制、十六进制)[通俗易懂]十进制转R进制十进制转二进制十进制整数转二进制十进制整数转换成二进制采用“除2倒取余”,十进制小数转换成二进制小数采用“乘2取整”。例题:135D=__B解析:如下图所示,将135除以2,得余数,直到不能整除,然后再将余数从下至上倒取。得到结果:10000111B.图1.十进制整数转二进制十进制小数转二进制十进制小数转换成二进制小数采用“乘2取整,顺…

    2022年10月18日
    0
  • 数据库建立索引常用的规则

    数据库建立索引常用的规则数据库建立索引常用的规则如下:1、表的主键、外键必须有索引; 2、数据量…

    2022年7月24日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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