我最近參加了面試,面試官問我關於HashMap
和ConcurrentHashMap
的問題。在最初的線程安全優勢之後,我說它在遍歷時不會拋出ConcurrentModificationException
,而不是HashMap
。ConcurrentHashMap是否自己創建副本?
面試官繼續問我爲什麼不扔它。我說內部HashMap
有一個變量modCount
,它保留對地圖所做的修改次數,Iterator
正在比較這個數字和它在創建時被初始化的數字。如果這個數字不同,它會拋出一個異常,這個比較不會發生在ConcurrentHashMap
。
然後他說ConcurrentHashMap
會在遍歷時自己複製一份。
我對這個說法有所懷疑,因爲以前沒有遇到過這個。即使閱讀文檔也沒有給我足夠的答案。
它會在任何時候複製(讀或寫)?
* ConcurrentHashMap在遍歷時會自己創建副本* - 他錯了。查看源代碼 –
'然後他說ConcurrentHashMap將在遍歷時自己創建一個副本。'任何不在javadoc中的都是純粹的bs。其他實施細節可能在某個時間點是真實的,但不能獲得如此強有力的聲明。 – UmNyobe
我希望你沒有得到這份工作。 – UmNyobe