我是靠谱客的博主 听话万宝路,这篇文章主要介绍Java中集合遍历Iterator迭代器执行原理 迭代器模式 foreach 增强for循环,现在分享给大家,希望可以做个参考。

文章目录

    • 1、iterator迭代器
    • 2、开发中推荐使用方式
    • 3、错误的使用方式
    • 4、iterator迭代器中remove()方法
    • 5、利用迭代器实现的增强for循环遍历或者说foreach遍历
    • 6、面试题

1、iterator迭代器

用来遍历Colletion接口实现的集合,返回iterator接口的实例。

(1)iterator迭代器:专门用来遍历List、Set接口实现的集合,它不是一个容器,是Colletion接口中的一个遍历集合的方法,相当于火车上的乘务员的检票过程;当然也可以用于遍历HashMap,因为map中的Entry里面有一个个的Key,这个Key是Set(唯一不重复的,而Set可以用iterator遍历),所以可以通过Key得到Value,这就实现了HashMap的遍历了。

(2)迭代器模式:提供一种方法访问一个容器(container)对象中各个元素,而不需要暴露该对象的内部细节。迭代器模式,可以说是专门为集合而生;

(3)集合对象每次调用iterator()方法都得到一个全新的的迭代器对象,默认游标都在集合的第一元素之前,下面有图示;

(4)内部有三个常见方法

①hasNext() :判断当前集合里还有没有元素可有进行遍历;
next() : 用来遍历打印集合中的元素;
remove() : 可以在遍历到指定的元素时进行移除指定的元素,要注意的是在调用remove()时,一定要先调用next()方法,先让指针(游标)下移到元素上。(图中coll是集合对象)
在这里插入图片描述

2、开发中推荐使用方式

复制代码
1
2
3
4
5
6
Iterator iterator = coll.iterator();//coll为集合对象 while(iterator.hasNext()) { // next():①指针下移;②将下移以后集合位置上的元素返回。 System.out.println (iterator.next()); }

3、错误的使用方式

(1)错误方式一,没有调用hasNext()

输出方式为:打印一个元素后跳一个元素不打印,再去打印下一个,就是去移动指针了,但没有去打印。并会报java.util.NoSunchElementException

复制代码
1
2
3
4
5
Iterator iterator= coll.iterator();//coll为集合对象 while((iterator.next()) != null) { System.out.println (iterator.next()); }

(2)错误方式二,没有在while外去创建iterator对象

输出方式为:会循环输出集合中第一个元素,死循环,原因是每次都会去创建一个新的iterator对象,而iterator的游标初始还是在第一个元素之前,next就是第一个元素,就打印第一个元素。

复制代码
1
2
3
4
while(coll.iterator().hasNext()) { System.out.println (iterator.next()); }

4、iterator迭代器中remove()方法

复制代码
1
2
3
4
5
6
7
8
Iterator iterator = coll.iterator(); //coll是一个集合对象 while(iterator.hasNext()) { object obj = iterator.next(); //先调用next()方法 if ("hello".equals(obj)) { iterator.remove(); //再调用remove()方法 } }

5、利用迭代器实现的增强for循环遍历或者说foreach遍历

(1)作用 :增强for循环是用来遍历数组(包括一维数组和二位数组)、集合。

(2)格式:

复制代码
1
2
3
4
for (数组或集合元素类型 局部变量名 :数组或集合对象名) { ... //代码 }

3)、注意点:
这种遍历方式是在底层重新创建了一个数组或者集合,遍历过程中不会对原数组或者集合进行修改数据

4)、代码演示:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.ArrayList; public class Test1 { public static void main(String[] args) { int[][] arr = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}}; for (int[] arr1 : arr) { //foreach遍历二位数组 for (int i : arr1) { System.out.print(i + " "); //不换行打印元素 } System.out.println(); } System.out.println("---------"); ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); for (Integer integer : list) { //foreach遍历集合 System.out.print(integer + " "); //不换行输出 } } }

打印结果:

复制代码
1
2
3
4
5
6
1 2 3 1 2 3 1 2 3 --------- 1 2 3 4

6、面试题

其中关于迭代器的有一个笔试题:大概就是考察,使用迭代器会不会去改变当前集合本身的元素?

答案:迭代器不会去对当前集合去做任何的修改操作,于是是不会改变集合本身元素,那么怎么理解remove()方法的删除呢?
其实删除相当于是跳过当前要删除的元素,而不去打印它罢了。

有用点个关注,手留余香! ???? ???? ????

最后

以上就是听话万宝路最近收集整理的关于Java中集合遍历Iterator迭代器执行原理 迭代器模式 foreach 增强for循环的全部内容,更多相关Java中集合遍历Iterator迭代器执行原理内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部