Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java.util.HashMap中,为什么modcount不是布尔值?_Java_Hashmap - Fatal编程技术网

在java.util.HashMap中,为什么modcount不是布尔值?

在java.util.HashMap中,为什么modcount不是布尔值?,java,hashmap,Java,Hashmap,在java.util.HashMap中,成员变量modCount似乎主要用于检测concurrentmodification。 那么,保持该变量为int的必要性是什么?这不能通过bool实现吗?具有修改计数,而不是布尔值,让多个迭代器同时跟踪它们是否有效 如果使用布尔值跟踪修改,那么所有迭代器都需要处于相同的有效状态。计数让迭代器知道在创建迭代器时发生了多少修改。因此,如果使用时的修改次数不同,它就会知道它是无效的。这允许一些迭代器是有效的,而一些是无效的,所有这些都不需要手动更新每个迭代器的有

在java.util.HashMap中,成员变量modCount似乎主要用于检测concurrentmodification。
那么,保持该变量为int的必要性是什么?这不能通过bool实现吗?

具有修改计数,而不是布尔值,让多个迭代器同时跟踪它们是否有效


如果使用布尔值跟踪修改,那么所有迭代器都需要处于相同的有效状态。计数让迭代器知道在创建迭代器时发生了多少修改。因此,如果使用时的修改次数不同,它就会知道它是无效的。这允许一些迭代器是有效的,而一些是无效的,所有这些都不需要手动更新每个迭代器的有效性。

如果您有一个布尔值,这意味着在调用迭代器之前,您必须将其设置为
false
,完成后,您将检查它是否为
true
,对吗

但是如果您这样做了,并且创建了两个迭代器,或者创建了一个迭代器并调用
forEach
方法,那么第二个迭代器将再次重置变量

Iterator<K> keyIterator = map.keySet().iterator();
...
keyIterator.next();
...
map.put(key,value);

Iterator<Map.Entry<K,V>> pairIterator = map.entrySet().iterator();
...
keyIterator.next();
Iterator-keyterator=map.keySet().Iterator();
...
keyterator.next();
...
map.put(键、值);
迭代器pairIterator=map.entrySet().Iterator();
...
keyterator.next();
现在,对KyTrava. NeXT()/<代码>的最后调用应该失败,因为<代码> MAP.PUT(key,value) >中间调用。但是如果我们通过重置布尔值来工作,那么
map.EntrySet().iterator()
必须清除布尔标志。因此,
keyinterator.next()
不会失败

使用整数可以避免这个问题,因为没有一个迭代器实际更改映射的状态-只有修改操作才更改。保留“旧值”的变量保留在本地,因此不会干扰其他读取器。

modCount是地图被修改的次数。至于是否可以用
布尔值
做同样的事情。。。也许吧,但这是一个内部领域。也许只有JDK开发人员能够提供真正的解释。