import java.util.Objects;
import java.util.function.Consumer;
/**
* @Classname Iterator:Iterator是foreach遍历的主体
* @note:Iterator是一个集合上的迭代器,用来替代Enumeration进行遍历和迭代
* @note:Iterator和Iterable的区别和联系?集合实现类都会重写Iterable接口的Iterator()方法,返回适合自己的迭代器
* @date 2021年7月5日 下午2:18:54
* @Version 1.0
*/
public interface Iterator<E> {
// 判断一个对象是否还有下一个元素
boolean hasNext();
// 获取下一个元素
E next();
// 删除最后一个元素。默认是不支持的再很多情况下其结果是不可预测的,比如数据集合在此时被需改
default void remove() { throw new UnsupportedOperationException("remove");}
// 主要将每个元素作为参数发给action来执行特定的操作
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while(hasNext()) {
action.accept(next());
}
}
/**
* 使用Iterator对容器进行迭代时如果修改容器可能会报ConcurrentModificationexception异常,官方称之为fail_fast
* 如在调用迭代起的next,remove方法时都会比较expectedModCount和modCount是否相等,如果不相等就会出现上面的异常
* 解决方法一:用CopyOnWriteArrayList,ConcurrentHashMap替换ArrayList,HashMap,
* 它们在写入时会创建一个copy,然后在这个copy版本上进行修改操作,这样就不会影响原来的迭代
* 解决方法二:用Collections.synchronizedList加同步锁
*/
}
集合类源码之迭代器Iterator
最新推荐文章于 2024-07-22 14:15:06 发布