调试集合时,modcount变量是什么意思?

9

在使用Eclipse调试Java代码时,对于集合变量,我看到了modcount成员。那是什么意思?

1个回答

34
许多Java的集合产生“快速失败”的迭代器,这意味着如果在创建迭代器之后更改了集合,迭代器将被使无效,并在尽可能快地抛出一个“ConcurrentModificationException”异常。 (与之后失败或返回无效数据相比。)
为了支持这个功能,集合必须跟踪是否已经被修改。每次更改集合时,它都会增加“modcount”。当集合产生迭代器时,迭代器存储了它创建时的“modcount”的值。然后,无论何时你试图使用迭代器,它都会检查它保存的“modcount”是否与父集合当前的“modcount”不同;如果是,则迭代器会因为“ConcurrentModificationException”异常而失败。
(这个规则的例外是通过迭代器本身(例如迭代器的“remove”方法)对集合进行的修改不会使迭代器失效。)

1
谢谢你提供这么好的解释。我知道它会做类似于这样的事情,但不是很详细。 - moeTi
非常好的解释。现在很清楚了。 - Ad Infinitum
代码:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#ArrayList.ListItr - roottraveller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接