Iterator迭代器

Iterator接口共包含4个方法

public interface Iterator<E> {
    E next();
    boolean hasNext();
    void remove();
    default void forEachRemaining(Consumer<? super E> action){};
}

1. 反复调用next()方法就可以逐个的遍历集合中的元素,如果在集合末尾调用next()方法就会抛出NoSuchElementException异常

2. 为了防止抛出这样的异常,我们在利用Iterato遍历集合元素时需要将next()和hasNext()配对使用,每次在调用next()方法迭代下一个元素时,应该先调用hasNext()方法检查是否存在下一个元素

3. 在Java SE 8中,甚至不用写循环。可以调用forEachRemaining()方法并提供一个lambda表达式。将对迭代器的每一个元素调用这个lambda表达式,直到没有元素

iterator.forEachRemaining(element -> /*do something with element*/);

4. 元素被访问的顺序取决于集合类型,如果对ArrayList进行迭代,迭代器将会从索引 0 开始,每迭代一次索引值加 1。然而,如果访问HashSet中的元素, 每个元素将会按照某种随机顺序次序出现。虽然可以确定在迭代过程中能够遍历到集合中的每一个元素,但却无法预知元素的访问次序

5. Java与C++的迭代器有本质区别。在C++中,迭代器是根据数组索引建模的,可以直接根据索引查找指定位置的元素。但是,Java中的迭代器不是如此,查找一个元素的唯一方法是next()方法,而且 Java 的迭代器在集合上顺序移动。可以将 Java 迭代器认为是位于两个元素之间,当调用next()方法时,迭代器越过下一个元素,并返回当前元素
这里写图片描述

6. next方法与 remove方法具有相互依赖性,如果调用remove之前没有调用next将会是不合法的。

iterator.remove();
iterator.remove();  //Error!
//不能连续删除,必须先将iterator移向下一个元素

iterator.remove();
iterator.next();
iterator.remove();  //OK!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值