Java 之 集合中的 modCount的作用

modCount:记录当前集合被修改的次数

在所有的集合实现类中(Collection与Map中),都会有一个 modCount 的变量出现,它的作用就是记录当前集合被修改的次数。

下面以ArrayList 类进行说明:

添加方法:

删除方法:

可以看出,两个操作都会影响元素的个数。

当我们使用迭代器或 foreach 遍历时,如果你在 foreach 遍历时,自动调用迭代器的迭代方法,此时在遍历过程中调用了集合的add,remove方法时,modCount就会改变,而迭代器记录的modCount是开始迭代之前的,如果两个不一致,就会报异常,说明有两个线路(线程)同时操作集合。这种操作有风险,为了保证结果的正确性, 避免这样的情况发生,一旦发现modCount与expectedModCount不一致,立即报错。

  此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改, 否则在任何时间以任何方式对列表进行修改, 迭代器都会抛出 ConcurrentModificationException。 因此,面对并发的修改,迭代器很快就会完全失败, 而不是冒着在将来某个不确定时间发生任意不确定行为的风险。

原文地址:https://www.cnblogs.com/niujifei/p/12183232.html

时间: 2024-07-31 19:32:06

Java 之 集合中的 modCount的作用的相关文章

java按照集合中元素的属性进行排序示例代码

public class Student { private String name; private int age; private int id; public Student() {  super(); } public Student(String name, int age, int id) {  super();  this.name = name;  this.age = age;  this.id = id; } public String getName() {  retur

Java Collection集合中的iterator方法

Iterator接口的概述 /** * java.util.Iterator接口:选代器(对集合进行遍历) * 有两个常用的方法 * boolean hasNext() * 如果仍有元素可以迭代,则返回true. * 即判断集合中还有没有下ー个元素,有就返回true,没有就返回 false * E next() * 返回送代的下一个元素. * 即取出集合中的下一个元素 * iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象. * 获取实现类的方式比较特

Java和C++中final关键字的作用和区别

Java中final关键字的作用: a.作用于类:不允许扩展该类,即不能用该类来定义子类. b.作用于方法:子类不能覆盖这个方法,但是可以被继承. 早期Java中,有程序员利用final来避免动态绑定带来的系统开销.现在这个功能主要由编译器来实现. c.作用于域:构造对象之后不能改变该域的值. d.作用于函数参数:可以读取,但是不能改变该参数. 注意:final类的所有方法自动成为final的,不包括域. 将方法或类声明为final主要目的是确保它们在子类中不会改变语义. String类就是一个

JAVA求集合中的组合

好几个月没弄代码了,今天弄个求组合的DEMO 思路是将集合的每个值对照一个索引,索引大小是集合的大小+2.索引默认为[000...000],当组合后选取的组合值demo为[0100..00].然后根据遍历索引来到集合中取值. 上代码: import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ComBit { public static void main(String[]

黑马程序员——java——TreeSet集合中储存学生对象,按照其年龄进行排序

TreeSet集合中储存学生对象,按照其年龄进行排序 import java.util.Comparator; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.TreeSet; public class SortListDemos { public static void main(String[] args) { // //linkhash

Java List集合中元素比较大小

list排序方法一Comparator形式: 1.比较数字 List<Shoes> all_shoes = new ArrayList<Shoes>(); Collections.sort(all_shoes, new Comparator<Shoes>(){ @Override /* * * int compare(String o1, String o2) 返回一个基本类型的整型 * 返回-1表示:shoes1.getSimilarity()大于等于shoes2.g

Java:session中的invalidate()的作用是什么呢?求解

手工杀会话.会话失效有2种可能:超时和手工杀会话.手工杀方便省时间,程序员都爱用. 比如我做一个程序需要登录,中间访问的页面有会话控制,如果没有登录则跳转到登录页面,退出时清会话信息. 这是有两个选择:把session数据清空,或直接杀会话.建议直接杀会话,方便.如果退出时不清会话,对方点浏览器后退,依然无需登录可以正常访问站点. 追问 就是说这个东西的最大用处是作退出功能时直接用session.invalidate()将session清空就行了以免有遗漏,如果想手动清空某项session,也可

Java 复习 —— 集合数组帮助类

1.集合帮助类 基本就这些了,关键是要了解 Collections 是集合的帮助类,不是数组的帮助类: 1)生成只读的集合实例对象 Collections.singletonList--用来生成只读 的单一元素的List Collections.singletonMap--用来生成只读 的单Key和Value组成的Map Collections.singleton--用来生成只读 的单一元素的Set Collections.unmodifiableList--用来生成只读 的List Colle

JAVA、android中常用的一些jar包的作用

正文: 这里主要介绍的是hibernate使用到的.jar Hibernate一共包括了23个jar包,令人眼花缭乱.本文将详细讲解Hibernate每个jar包的作用,便于你在应用中根据自己的需要进行取舍. 下载Hibernate,例如2.0.3稳定版本,解压缩,可以看到一个hibernate2.jar和lib目录下有22个jar包: hibernate2.jar: Hibernate的库,没有什么可说的,必须使用的jar包 cglib-asm.jar: CGLIB库,Hibernate用它来