在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. 爲什麼不python返回布爾值
- 2. 爲什麼不布爾值切換?
- 3. 爲什麼IDBKeyRange.only()不允許布爾值?
- 4. 爲什麼布爾TRUE不是TRUE?
- 5. C#:爲什麼 '布爾' 而不是 '布爾'
- 6. 爲什麼可以將布爾數組寫入宗地而不是布爾值?
- 7. 爲什麼graphql,紅寶石的布爾類型不是空值
- 8. 什麼時候應該使用布爾值而不是布爾值?
- 9. 什麼是TRUE(240)布爾值
- 10. true是什麼區別?和布爾值
- 11. 什麼是mysql的最佳布爾值?
- 12. 布爾值是什麼特別?
- 13. 爲什麼布爾值沒有改變?
- 14. @JoinFormula爲什麼hibernate前綴布爾值?
- 15. 在java中布爾值賦值的有效方法是什麼?
- 16. 爲什麼布爾值在本質上是單[JavaScript的]
- 17. HTML - 爲什麼布爾屬性沒有布爾值?
- 18. 什麼是布爾值作爲返回值的方法?
- 19. 爲什麼JTable中的布爾值顯示爲true/false而不是複選框?
- 20. 什麼是布爾標誌
- 21. 爲什麼filter_var()不接受0作爲布爾值?
- 22. 爲什麼不能將SplFileInfo轉換爲布爾值?
- 23. `var status = true`不能設置爲布爾值,爲什麼?
- 24. 爲什麼不檢測布爾變量?
- 25. 爲什麼這個布爾編譯在C++而不是Java?
- 26. 在Matlab中表示布爾值的傳統類型是什麼?
- 27. 在lucene中索引布爾值的最佳選擇是什麼?
- 28. 什麼是在MySQL中存儲布爾值的數據類型?
- 29. 未能轉換類型的java.util.HashMap的價值布爾
- 30. 爲什麼我的布爾值在for循環中被跳過?
http://stackoverflow.com/questions/11833058/modcount-in-map-and-list modCount是地圖被修改的次數。至於是否可以用'boolean'完成同樣的事情......也許,但這是一個內部領域。只有JDK開發者才能提供真正的解釋。 – Tunaki