(Iterator)Iterator迭代输出

Iterator迭代输出

集合输出实际上从JDK1.8开始就在Interable接口之中提供有一个forEach(), 但是这种方法的的输出并不是传统意义上的输出形式,并且也很难在实际的开发之中出现,对于集合操作而言,应该定义了四种输出形式:

  • 迭代输出:Iterator(95%)
  • 双向迭代输出:ListIterator
  • 枚举输出:Enumeration
  • forEach输出

通过Collection接口的继承关系可以发现,从JDK1.5开始起多继承了Iterable父接口,并且在这个接口里面定义有iterator()操作方法,通过此方法可以获取Iterator接口对象(在JDK1.5之前,这一方法直接定义在Collection中)

获取Iterator接口对象:Iterator<T> iterator();

在Iterator定义有如下的方法:

  • 判断是否有数据:boolean hasNext();
  • 返回迭代中的下一个元素:E next();
  • 删除:default void remove();

在之前使用的java.util.Scanner类就是Iterator接口的子类,所以此时类继承关系如下:

范例:使用Iterator输出

import java.util.Iterator;
import java.util.Set;

public class IteratorDemo {

    public static void main(String[] args) {

        Set<String> set= Set.of("Hello","Word!");
        Iterator<String> iterator = set.iterator(); //实例化iterator对象
        while (iterator.hasNext()){ //如果有下一个数值
            String str =iterator.next();    //返回迭代中的下一个元素
            System.out.println(str);
        }

    }

}

Hello
Word!

但是对于Itertor接口中的remove()方法的使用需要特别注意(如果不是必须不要使用)。实际上在Collection接口中定义有数据的删除方法,但是在进行迭代输出的过程里面如果使用了Collection中的remove()方法会导致迭代失败。

面试题:请解释Collection.remove()与Iterator.remove()的区别?

  • 在进行迭代输出的时候如果使用了Collection.remove()则会造成并发更新的异常,导致程序删除出错,此时只能用Iterator中的remove()正常删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值