Collection 集合体系的遍历方式:迭代器遍历 Iterator

52 阅读1分钟

Iterator

Iterator 介绍

Iterator 迭代器,Collection 集合体系的遍历方式之一。

Iterator 常用方法

* boolean hasNext();// 当前位置是否有元素
* E next();// 获取当前位置上的元素,并将指针移向下一个位置
* default void remove();// 删除当前位置上的元素(只有删除方法,没有添加和修改方法)

Iterator 使用

Collection<String> list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");

// 迭代器遍历集合
Iterator<String> iterator = list.iterator();// 创建迭代器对象,创建指针
while (iterator.hasNext()) {// boolean hasNext = iterator.hasNext();// 判断是否有元素
    String str = iterator.next();// 1.获取元素,2.移动指针
    if (str.equals("bbb")) {
        // list.remove("bbb");// 会报ConcurrentModificationException 并发修改异常
        iterator.remove();
    }
}

Iterator MST

Q1:迭代器遍历的时候能不能调用集合的方法进行添加或者删除?
A:不能
迭代器遍历的时候,不能调用集合的添加或者删除的方法进行修改数据;
会报ConcurrentModificationException (并发修改异常)异常;
如果要在迭代器遍历的时候操作集合,可以使用迭代器提供的方法;
Iterator只提供了一个remove方法删除元素用的,想要其他操作暂时不支持。

Iterator 源码

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());
    }
}