集合中的快速失败

来源:互联网 发布:linq 删除重复数据 编辑:程序博客网 时间:2024/06/06 02:35

在ArrayList中存在一个变量modCount用来记录操作数。

在其内部类Itr中记录了另一个变量expectedModCount 在操作集合的时候modCount会加加,同时把操作数赋值给期望数,在使用迭代器进行操作集合时会先判断操作数是否等于期望数,如果不相等就直接抛出并发修改异常,因此在遍历非线程安全的数据结构时应该优先使用迭代器遍历。


public void add(E e) {            checkForComodification();            try {                int i = cursor;                ArrayList.this.add(i, e);                cursor = i + 1;                lastRet = -1;                expectedModCount = modCount;            } catch (IndexOutOfBoundsException ex) {                throw new ConcurrentModificationException();            }        }
final void checkForComodification() {            if (modCount != expectedModCount)                throw new ConcurrentModificationException();        }



原创粉丝点击