ArrayList中的modCount个人理解

/**
     * The number of times this list has been <i>structurally modified</i>.
     * Structural modifications are those that change the size of the
     * list, or otherwise perturb it in such a fashion that iterations in
     * progress may yield incorrect results.
     *
     * <p>This field is used by the iterator and list iterator implementation
     * returned by the {@code iterator} and {@code listIterator} methods.
     * If the value of this field changes unexpectedly, the iterator (or list
     * iterator) will throw a {@code ConcurrentModificationException} in
     * response to the {@code next}, {@code remove}, {@code previous},
     * {@code set} or {@code add} operations.  This provides
     * <i>fail-fast</i> behavior, rather than non-deterministic behavior in
     * the face of concurrent modification during iteration.
     *
     * <p><b>Use of this field by subclasses is optional.</b> If a subclass
     * wishes to provide fail-fast iterators (and list iterators), then it
     * merely has to increment this field in its {@code add(int, E)} and
     * {@code remove(int)} methods (and any other methods that it overrides
     * that result in structural modifications to the list).  A single call to
     * {@code add(int, E)} or {@code remove(int)} must add no more than
     * one to this field, or the iterators (and list iterators) will throw
     * bogus {@code ConcurrentModificationExceptions}.  If an implementation
     * does not wish to provide fail-fast iterators, this field may be
     * ignored.
     */
    protected transient int modCount = 0;

借用一下网上的翻译:

modCount指的是list被结构性修改的次数。

结构性修改是指改变list的size大小,或者其他的情况导致正在迭代迭代的时候出现了错误的结果

这个字段用于迭代器和列表迭代器的实现类,由迭代器和列表迭代器返回。

如果这个值被意外改变,这个迭代器或者列表迭代器将会抛出异常来响应。add,next,remove,previous,st,add

在迭代过程中,它提供了fail-fast行为而不是不确定的行为来处理并发修改。

子类使用这个字段是可选的,如果子类希望提供fail-fast迭代器,它仅仅需要在add(int),remove(int)方法(或者它重写的其他任何会修改这个列表的方法)中添加这个字段。

调用一次add(int,E)或者remove(int,E)方法仅仅给这个字段加1,否则迭代器会抛出异常。

如果一个实现类不希望提供fail-fast迭代器,则忽略这个字段。

 

exceptedModCount

expectedModCount = alist.modCount;

modCount用法

在线程不安全的集合集合中,在某些方法中,初始化迭代器会给modCount赋值,如果在遍历的过程中,一旦发现这个对象的modCount和迭代器存储的modCount不一样,就会报错。

fail-fast机制

在线程不安全的集合中,如果在使用迭代器的过程中,发现集合被修改,会抛出ConcurrentModificationExceptions错误,这就是快速失败机制。

对于集合进行结构性修改时,modCount都会增加,在初始化迭代器时,modCount的值会赋值给expectedModCount,在迭代过程中,只要modCount变了(不是线程安全的,其他线程可能修改)int expectedModCount=modCount就不成立了,迭代器监测到这一点,就会抛出错误:ConcurrentModificationExceptions

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值