集合中的迭代器

一.源码

public interface Iterator<E> {
    boolean hasNext();
    E next();
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

二.具体方法

  • next():通过反复调用next方法,可以逐个访问集合中的每个元素。但是,如果到达了集合的末尾,next方法将抛出一个NoSuchElementException。因此,需要在调用next之前调用hasNext方法。如果迭代器对象还有多个供访问的元素,这个方法就返回true。如果想要查看集合中的所有元素,就请求一个迭代器,并在hasNext返回true时反复地调用next方法。
  • forEachRemaining:从Java SE 8开始,甚至不用写循环。可以调用forEachRemaining方法并提供一个lambda表达式,直到在没有元素为止。
iterator.forEachRemaining(element ->{
            System.out.println(element);
        });

三.特点

  • 使用迭代器时,查找操作与位置变更是紧密相连的。查找一个元素的唯一方法时调用next,而在执行查找操作的同时,迭代器的位置随之向前移动。
  • 因此,应当将Java迭代器认为是位于两个元素之间。当调用next时,迭代器就越过下一个元素,并返回刚刚越过的那个元素的引用。
  • Iterator接口的remove方法将会删除上次调用next方法时返回的元素。
  • 如果调用remove之前没有调用next将是不合法的。如果这样做,将会抛出一个IllegalStateException异常。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值