在看ArrayList源码时,看到了一个字段modCount。在add、remove、clear等方法中都有modCount++的操作。不明白什么意思。点进去看了看该字段的解释,总算明白了。modCount是在AbstractList抽象类中定义的。该字段的解释如下所示。

  1. /**
  2. * The number of times this list has been <i>structurally modified</i>.
  3. * Structural modifications are those that change the size of the
  4. * list, or otherwise perturb it in such a fashion that iterations in
  5. * progress may yield incorrect results.
  6. * 该list结构性改变的次数。结构改变是指list的大小改变了,或者顺序被打乱,从而
  7. * 导致iterations在执行过程中得到错误的结果。
  8. *
  9. * <p>This field is used by the iterator and list iterator implementation
  10. * returned by the {@code iterator} and {@code listIterator} methods.
  11. * If the value of this field changes unexpectedly, the iterator (or list
  12. * iterator) will throw a {@code ConcurrentModificationException} in
  13. * response to the {@code next}, {@code remove}, {@code previous},
  14. * {@code set} or {@code add} operations. This provides
  15. * <i>fail-fast</i> behavior, rather than non-deterministic behavior in
  16. * the face of concurrent modification during iteration.
  17. * 该字段用于iterator和listIterator方法返回的iterator和list iterator实现数据迭代。
  18. * 如果该字段出现了意外的改变,iterator/list iterator在执行next、remove、previous、
  19. * set、add等操作时将抛出ConcurrentModificationException。 这样就提供了快速失败行为,
  20. * 而不会出现在执行迭代过程中的不确定行为。
  21. *
  22. * <p><b>Use of this field by subclasses is optional.</b> If a subclass
  23. * wishes to provide fail-fast iterators (and list iterators), then it
  24. * merely has to increment this field in its {@code add(int, E)} and
  25. * {@code remove(int)} methods (and any other methods that it overrides
  26. * that result in structural modifications to the list). A single call to
  27. * {@code add(int, E)} or {@code remove(int)} must add no more than
  28. * one to this field, or the iterators (and list iterators) will throw
  29. * bogus {@code ConcurrentModificationExceptions}. If an implementation
  30. * does not wish to provide fail-fast iterators, this field may be
  31. * ignored.
  32. * 子类是否使用该字段是可选的。 如果子类想要提供快速失败的iterator/list iterator,
  33. * 只需要在其add、remove或者其他重载的会导致list结构改变的方法中增加该字段的值。
  34. * 单次都add或者remove的调用对该字段值的增加不能超过1,否则iterator/list iterator
  35. * 将抛出虚假的ConcurrentModificationExceptions。 如果实现类不想提供快速失败的迭代器,
  36. * 可以忽略掉该字段。
  37. */
  38. protected transient int modCount = 0;
  39. //如果不晓得transient干嘛的,请自觉去面壁☺

关于ConcurrentModificationException,请参考:Java遍历时删除List、Set、Map中的元素(源码分析)

ArrayList中的modCount与ConcurrentModificationException的更多相关文章

  1. ArrayList中ConcurrentModificationException

    java中两种基本的集合结构ArrayList和LinkedList底层有两种不同的存储方式实现,ArrayList为数组实现,属于顺序存储,LinkedList为链表实现,属于链式存储,在对Arra ...

  2. ArrayList中modCount的作用

    在ArrayList中有个成员变量modCount,继承于AbstractList. 这个成员变量记录着集合的修改次数,也就每次add或者remove它的值都会加1.这到底有什么用呢? 先看下面一段测 ...

  3. 为什么阿里巴巴要求谨慎使用ArrayList中的subList方法

    GitHub 3.7k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 3.7k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 3.7k Star 的 ...

  4. 谨慎使用ArrayList中的subList方法

    转自:https://www.toutiao.com/a6705958780460335619/?tt_from=weixin&utm_campaign=client_share&wx ...

  5. 迭代器使用过程中为什么抛出ConcurrentModificationException

    出现的场景:在迭代器对集合进行遍历的同时,集合本身进行变更操作(add(), remove(), set()). 当正常调用时: import java.util.ArrayList; import ...

  6. 从`ArrayList`中了解Java的迭代器

    目录 什么是迭代器 迭代器的设计意义 ArrayList对迭代器的实现 增强for循环和迭代器 参考链接 什么是迭代器 Java中的迭代器--Iterator是一个位于java.util包下的接口,这 ...

  7. ArrayList中的一些小细节@JDK8

    ArrayList中的一些小细节@JDK8 protected transient int modCount = 0; 该变量用于记录ArrayList的版本号,不可被序列化,每次对ArrayList ...

  8. ArrayList中元素去重问题

    如题所示,如果一个ArrayList中包含多个重复元素,该如何去重呢? 思路一以及实现: 声明2个ArrayList,分别为listA与listB ,listA为待去重list ,listB 保存去重 ...

  9. Java 删除ArrayList中重复元素,保持顺序

    // 删除ArrayList中重复元素,保持顺序          public static List<Map<String, Object>> removeDuplicat ...

随机推荐

  1. python json.dumps 中的ensure_ascii 参数引起的中文编码问题

    在使用json.dumps时要注意一个问题   >>> import json >>> print json.dumps('中国') "\u4e2d\u5 ...

  2. MySQL高可用架构之MHA 原理与实践

    MHA简介 关于MHA MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover 功能.MHA在监控到mas ...

  3. winform中的数据绑定

    1. 简单的数据绑定 例1 using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[& ...

  4. [LeetCode] Longest Harmonious Subsequence 最长和谐子序列

    We define a harmonious array is an array where the difference between its maximum value and its mini ...

  5. [Codeforces 864B]Polycarp and Letters

    Description Polycarp loves lowercase letters and dislikes uppercase ones. Once he got a string s con ...

  6. 【HNOI2017】影魔

    题目描述 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄. 每一个灵魂,都有着自 ...

  7. [BZOJ]4405: [wc2016]挑战NPC(带花树)

    带花树模板 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ...

  8. UVA - 11107:Life Forms

    后缀数组height+二分 #include<cstdio> #include<cstdlib> #include<algorithm> #include<c ...

  9. 【USACO08NOV】奶牛混合起来Mixed Up Cows

    题目描述 约翰有 N 头奶牛,第 i 头奶牛的编号是 S i ,每头奶牛的编号都不同.这些奶牛最近在闹脾气, 为表达不满的情绪,她们在排队的时候一定要排成混乱的队伍.如果一只队伍里所有位置相邻的奶牛 ...

  10. UVA129 —— Krypton Factor (氪因素)

    Input and Output In order to provide the Quiz Master with a potentially unlimited source of question ...