遍历ArrayList的方式包括迭代器、foreach循环和get(I )等。 其中迭代器和get方法有具体的代码。 foreach循环是怎么实现的?
通过反向编译class,让我们来看看JAVA如何处理foreach并遍历ArrayList和数组。
首先,foreach是遍历list的底层,还是遍历所用的迭代器; foreach遍历排列是从传统的i=0到i=length-1的遍历,书写方式上只是封装在foreach的形式中
扩展:为什么foreach无法在遍历list时调用remove方法
因为在迭代器遍历过程中,生成迭代器时在迭代器中记录list的modCount字段,不允许对list进行更改(删除、添加元素)。 调用next时返回检查迭代器维护的expectedModCount是否等于列表中的modCount,如果等于,则抛出异常的concurrentmodificationexception。 因此,使用foreach循环时,不能删除或添加list元素(modCount也将更改)。 要在遍历过程中删除,请使用迭代器遍历方法,然后使用iterator.remove (方法)。 在此为最后一个next ) )跳过的元素。 不能在调用next之前调用。 否则,也会抛出异常的IllegalStateException。
原始代码
列表列表=new ArrayList (;
for(intI=0; i 10; I )
list.add(I;
for(integerI:list ) {
system.out.println(I;
}
int [ ] arr={ 1,2,3,4,5 };
for(intI:ARR ) {
system.out.println(I;
}
将上述代码编译为class,反向编译如下:
Iterator var7=var1.iterator (;
wile(var7.Hasnext ) () ) ) ) ) )。
integervar3=(integer ) var7.next );
system.out.println(var3;
}
int [ ] var8=new int [ ] { 1,2,3,4,5 };
int[] var9=var8;
int var4=var8.length;
for(intvar5=0; var5 var4; var5) {
int var6=var9[var5];
system.out.println(var6;
}