集合类源码之迭代器Iterator

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加同步锁
 */
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值