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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 杭州的旅游景点与民间传说故事「建议收藏」

    杭州的旅游景点与民间传说故事「建议收藏」 杭州的旅游景点与民间传说故事虎跑梦泉虎跑泉是一处以“泉”为主题的观泉、听泉、品泉、试泉的泉源景观,又是以性空、济公、弘一法师传奇故事为特色的人文景观,坐落位于西湖之南的大慈山定慧禅寺内。民间传说唐代性空大师游历此山,这里风景优美,只是无水源,决定去别处,忽然有神人告诉他即将有二只老虎会来挖泉,翌日,果然有二虎跑山出泉,甘冽醇厚,纯净无菌,从此“龙井茶叶虎跑泉”被称为“西湖双绝”。

    2022年5月31日
    35
  • marquee标签被放弃了吗_危险废物标签如何填写

    marquee标签被放弃了吗_危险废物标签如何填写标签     标签是成对出现的标签,首标签和尾标签之间的内容就是滚动内容。     标签的属性主要有behavior、bgcolor、direction、width、height、hspace、vspace、loop、scrollamount、scrolldelay等,它们都是可选的。一.

    2025年7月26日
    3
  • Netron 下载链接

    Netron 下载链接https://github.com/lutzroeder/Netron

    2022年8月30日
    5
  • php中echo、print、print_r、var_dump、var_export区别

    php中echo、print、print_r、var_dump、var_export区别

    2021年11月5日
    48
  • Jenkins 安装教程

    Jenkins 安装教程Jenkins安装教程Jenkins安装教程说明开始安装JenkinsJenkins安装教程说明安装版本:jenkins-2.149-1.1参考文档:JenkinsWiki文档。安装环境:阿里云服务器ECS系统类型:CentOS7.4开始安装Jenkins安装步骤:准备工作。需要为Jenkins安装一个Java运行环境。根据官网W…

    2022年5月15日
    51
  • 偷了世界的程序员

    偷了世界的程序员

    2021年8月9日
    55
  • 发表回复

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

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