我是靠谱客的博主 淡然爆米花,最近开发中收集的这篇文章主要介绍java .foreach数组遍历_foreach遍历ArrayList和数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

}

最后

以上就是淡然爆米花为你收集整理的java .foreach数组遍历_foreach遍历ArrayList和数组的全部内容,希望文章能够帮你解决java .foreach数组遍历_foreach遍历ArrayList和数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部