我是靠谱客的博主 鳗鱼白羊,最近开发中收集的这篇文章主要介绍for each 循环和 iterator 迭代器的区别和使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 迭代器的区别和使用所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部