集合的通用遍历方法--java进阶day09

1.集合的三种通用遍历方法

之前我们学习过集合的遍历方法,为什么这里还要再学呢?

这是因为,之前我们用的遍历方法使用了索引,但我们知道set接口的实现类的集合均无索引,所以我们要学习通用的遍历方法

2.迭代器遍历

1.迭代器

迭代器叫做Iterator,是一个接口,我们知道接口是不能直接实例化的

所以,我们通过集合调用iterator方法,以多态的形式创建迭代器对象

如下图,左边是迭代器,也就是接口,那么右边就必然是实现类对象

我们通过ArrayList点开源码,发现iterator方法new了一个itr对象,而itr实现了Iterator接口

2.迭代器遍历

1.next方法

Iterator接口里面有两个方法,其中next方法可以帮我们从集合中获取到元素

如图,集合中存在三个学生对象,我们调用一次next方法,就获取到了一个学生对象


.


.

那么,只要调用三次next,就可以将这三个学生对象全部获取到了

2.hasnext方法

为了获取到三个对象,就要调用三次next,假如有一万个对象,那也得调用next方法吗?实在麻烦

hasnext方法就可以解决这个问题

--hasnext方法用于判断集合中是否有元素可以获取,如果有就返回true,否则false

根据这个性质,我们就可以使用while循环搭配上hasnext和next来进行迭代器遍历,如图


.

3.迭代器遍历原理

了解java中的源代码,更便于我们理解迭代器,如下图

当我们通过iterator获取到迭代器后,就会产生Itr对象,即上面的代码

Itr对象里有一个cursor变量,该变量表示指针,也就是右边的箭头,指针会指向索引

又因为cursor是成员变量,所以默认值为0

接着进入while循环,走hasnext方法

根据上图可知,该方法判断集合中是否还有元素可以遍历是通过集合长度来判断的,当指针不等于集合的长度时,说明还有元素可以遍历

在这里,curosr=0,明显不等于size=4,while循环通过,走next方法

next方法中,声明了一个变量i,然后cursor给i赋值,用于记录上一次的cursor,接着cursor加1,指针指向1号索引,此时还没有获取到元素A!

elementData[]就是一个数组,[]里放的就是i,此时i=0,所以会获取到元素A,也就将元素A返回给我们了

由此可知,next方法底层原理是指针先移动,然后再将上一次的元素返回

走完next,回到while,接着走hasnext,此时cursor=1,不等于size,满足条件,再走next,以此类推.......

在循环的过程中,next方法最好只调用一次,否则会因为指针的移动而造成问题


.
.

4.增强for循环--本质迭代器

“:”右边写要遍历的集合,左边写接收获取到的元素的变量

快捷键:

5.foreach循环--本质迭代器

foreach循环里的参数consumer是一个函数式接口,所以要给实现类对象

使用匿名内部类重写后的方法,()里的参数就是集合里遍历的所有元素(stu)


.

因为是函数式接口,我们还可以用Lambda表达式

posted @ 2025-03-23 14:22  直実  阅读(23)  评论(0)    收藏  举报