Iterator迭代器

本文介绍了Java中的Iterator接口及其使用步骤,包括如何通过`iterator()`获取迭代器对象,使用`hasNext()`和`next()`遍历集合元素。还讨论了迭代器的实现原理,涉及指针移动和元素取出的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、什么是迭代器?

Iterator是一个Collection集合元素的通用获取方式。再取出元素之前先判断集合中有没有元素,如果有,就把这个元素取出来,然后再继续判断。一直把集合中的所有元素都取出来。这种取出方式专业术语称为迭代、

Iterator接口常用的方法如下:

  1. E Next():返回迭代的下一个元素。
  2. boolean hasNext():如果仍有元素可以迭代,则返回true。

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

二、迭代器使用步骤(重要)

  1. 使用集合中的方法iterator()获取迭代器的实现对象,使用Iterator接口接收(多态)
  2. 使用Iterator接口中的方法hasNext判断还有没有下一个元素
  3. 使用Iterator接口中的方法next取出集合中的下一个元素

1.代码实现

(示例):

//创建一个集合
        Collection<String> coll = new ArrayList<>();
        coll.add("张三");
        coll.add("李四");
        coll.add("赵四");
        coll.add("王五");
       /* 第一步:获取一个迭代器
        注意:Iterator接口也是有泛型的,集合是什么泛型,迭代器就是什么泛型。*/
        Iterator<String> it = coll.iterator();
        /*第二步:判断*/
        boolean b1=it.hasNext();
        System.out.println(b1);
        /*第三步:取出下一个元素*/
        String s = it.next();
        System.out.println(s);

随后我们可以看到结果
true
张三

然后我们补全所有的迭代数据

        b1=it.hasNext();
        System.out.println(b1);
        s = it.next();
        System.out.println(s);

        b1=it.hasNext();
        System.out.println(b1);
        s = it.next();
        System.out.println(s);

        b1=it.hasNext();
        System.out.println(b1);
        s = it.next();
        System.out.println(s);

可以看到结果 集合都打印了出来
true
张三
true
李四
true
赵四
true
王五

而如果集合中没有元素,我们继续进行迭代,则会在判断是报出 False,若继续输出下一个元素,则会抛出异常 Exception in thread “main” java.util.NoSuchElementException

2.循环优化

我们可以看到迭代器取出元素的代码是一个重复的过程,那么我们可以使用循环优化。

  1. 不知道集合中有多少元素:使用while循环 循环结束的条件:hasNext方法返回false
 while (it.hasNext()){
            String e = it.next();
            System.out.println(e);
        }

我们可以看到结果:
张三
李四
赵四
王五

三、迭代器的实现原理

根据上面的简单说明,我们可以看到,当集合存在时:
在这里插入图片描述
通过第一步

   Iterator<String> it = coll.iterator();

coll.iterator()获取迭代器的实现类对象,并且会把指针(索引)引向集合的-1索引
在这里插入图片描述
第二步进行hasNext()判断集合中还有没有下一个元素,有的话进入Next()
在这里插入图片描述
而在其中,总共做了两件事情:
1.取出下一个元素: 1.张三 2.李四 3.王五 4.赵四
2.把指针往后移动一位:索引 -1 0 1 2 3
而当最后没有元素时,整个迭代过程也就结束了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值