我是靠谱客的博主 鳗鱼白羊,这篇文章主要介绍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使用案例:

使用案例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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); } } }

运行结果:

复制代码
1
2
0123456789

2.iterator 迭代器

2.1 iterator 迭代器是专门用来遍历Collection中的元素而提供的一个工具接口;

由于Collection接口中没有方法是带有索引作为参数,所以不能进行for循环遍历,因此Iterator迭代器主要用来迭代访问 Collection中的元素。

3.1 Iterator迭代器是一个接口,不能直接使用,需要使用Iterator接口的实现类对象。获取实现类的方式比较特殊,是Collection接口中有一个iterator()方法,这个方法返回的就是迭代器的实现类对象。

例如:

Iterator iterator= list.iterator();

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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()方法进行获取具体元素处理;

案例如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部