概述
1.for each
1.1 for each循环也叫增强for循环,是jdk1.5后有的用于循环遍历数组和集合的方式;其底层原理还是使用的iterator 来实现处理。
1.2 由于底层是迭代器,所以遍历的过程中不能对元素进行增删操作;如果在for each循环过程中使用集合的remove方法操作后,会报错java.util.ConcurrentModificationException。原因是for each底层是iterator实现,iterator在初始化过程中会定义两个变量:
int expectedModCount = modCount;
但是在集合的remove方法后,会更新modCount++,所以再iterator继续循环的时候,会调用next方法进行检查,在检查中会有expectedModCount = modCount这两个字段的是否相等的检查,所以删除后会报错。故而for each循环不支持删除元素操作;
1.3 for each使用案例:
使用案例:
package entity;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class Test20220706 {
@Test
public void learn(){
List<Integer> list = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
list.add(i);
}
for (int eam : list) {
System.out.print(eam);
}
}
}
运行结果:
0123456789
2.iterator 迭代器
2.1 iterator 迭代器是专门用来遍历Collection
中的元素而提供的一个工具接口;
由于Collection接口中没有方法是带有索引作为参数,所以不能进行for循环遍历,因此Iterator迭代器主要用来迭代访问 Collection中的元素。
3.1 Iterator迭代器是一个接口,不能直接使用,需要使用Iterator接口的实现类对象。获取实现类的方式比较特殊,是Collection接口中有一个iterator()方法,这个方法返回的就是迭代器的实现类对象。
例如:
Iterator iterator= list.iterator();
package entity;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test20220706 {
@Test
public void learn(){
//创建list
List<Integer> list = new ArrayList<>();
//给list添加元素
for (int i = 0; i <10 ; i++) {
list.add(i);
}
//获取Iterator接口的实现类
Iterator iterator= list.iterator();
}
}
3.2 Iterator迭代器的使用:
1).获取要循环的集合。
2).使用iterator()方法获取迭代器实现类;
3).使用.hasnext()方法来判断是否有元素信息;
4).然后使用.next()方法进行获取具体元素处理;
案例如下:
package entity;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test20220706 {
@Test
public void learn(){
//创建list
List<Integer> list = new ArrayList<>();
//给list添加元素
for (int i = 0; i <10 ; i++) {
list.add(i);
}
//获取Iterator接口的实现类
Iterator iterator= list.iterator();
//检查是否有元素
while (iterator.hasNext()){
//获取具体元素
Object it = iterator.next();
//具体业务处理
System.out.print(it);
}
}
}
4.for each 循环和 iterator 迭代器
使用的话,一般普通数据集合遍历使用for each 循环处理。具体使用性能对比如下:
4.1 运行性能方面
1).ArrayList集合对随机访问比较快,for each循环中的get()方法,采用的就是随机访问的方式,因此在对ArrayList集合循环时,for each循环效率高些。
2).LinkedList集合是顺序访问比较快,iterator中的next()方法,采用的是顺序访问的方式,因此在对LinkedList集合循环时,使用iterator较快些。
最后
以上就是鳗鱼白羊为你收集整理的for each 循环和 iterator 迭代器的区别和使用的全部内容,希望文章能够帮你解决for each 循环和 iterator 迭代器的区别和使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复