Iterator迭代器

来源:互联网 发布:网络推广费用预算 编辑:程序博客网 时间:2024/06/03 18:19

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!
原创粉丝点击