在java.util.HashMap中,成员变量modCount似乎主要用于检测并发修改。 那么保持该变量为int的需要是什么,不能用bool实现呢?在java.util.HashMap中,为什么modcount不是布尔值?
0
A
回答
5
修改计数而不是布尔值让多个迭代器可以跟踪它们是否有效。
如果使用布尔值跟踪修改,那么所有迭代器都需要处于相同的有效状态。计数让迭代器知道创建时发生了多少修改。因此,如果使用时的修改次数不同,则知道它是无效的。这允许一些迭代器是有效的,有些是无效的,所有这些都不需要手动更新每个迭代器的有效性。
2
如果你有一个布尔值,这意味着在调用迭代器之前,你必须将它设置为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();
,以keyIterator.next()
这最后调用应该失败,因为在中间map.put(key,value)
通话。但是,如果我们通过重置布尔值来工作,那么map.EntrySet().iterator()
必须清除布尔标志。因此,keyIterator.next()
不会失败。
使用整数可避免此问题,因为没有任何迭代器实际更改映射的状态 - 只有修改操作才会执行。保持“旧值”的变量保存在本地,因此不会干扰其他读者。
相关问题
- 1. 为什么不布尔值切换?
- 2. 为什么布尔TRUE不是TRUE?
- 3. C#:为什么 '布尔' 而不是 '布尔'
- 4. 为什么可以将布尔数组写入宗地而不是布尔值?
- 5. 为什么graphql,红宝石的布尔类型不是空值
- 6. 布尔值是什么特别?
- 7. true是什么区别?和布尔值
- 8. 为什么布尔值没有改变?
- 9. 为什么布尔值在本质上是单[JavaScript的]
- 10. 什么是布尔值作为返回值的方法?
- 11. 什么是布尔标志
- 12. 为什么filter_var()不接受0作为布尔值?
- 13. 为什么不检测布尔变量?
- 14. 在lucene中索引布尔值的最佳选择是什么?
- 15. 什么是在MySQL中存储布尔值的数据类型?
- 16. 未能转换类型的java.util.HashMap的价值布尔
- 17. 为什么我的布尔值在for循环中被跳过?
- 18. 为什么MySQL将布尔值解释为TINYINT(1)而不是BIT(1)?
- 19. 为什么WPF CheckBox中的IsChecked属性为可空布尔值?
- 20. 是什么返回布尔在cocos2dx
- 21. 什么是单向布尔在objectC
- 22. 绑定h:selectBooleanCheckbox值为int /整数而不是布尔值/布尔值
- 23. 为什么我在java中的布尔测试总是失败?
- 24. 布尔值为什么还原为原始值?
- 25. jQuery .data()不返回布尔值;为什么?
- 26. 为什么这个布尔值不能保存?
- 27. 为什么for循环不直接接受布尔值?
- 28. 为什么这个link_to url helper不更新布尔值记录?
- 29. 为什么在所有条件下这个布尔值总是零值?
- 30. 为什么逻辑连接词和布尔值在Coq中是分开的?
http://stackoverflow.com/questions/11833058/modcount-in-map-and-list modCount是地图被修改的次数。至于是否可以用'boolean'完成同样的事情......也许,但这是一个内部领域。只有JDK开发者才能提供真正的解释。 – Tunaki