HashMap putAll方法源碼異議 jdk1.7

其中擴容時取的參考只是新增Map m的size大小。若存在  m.size < table.length * 2^n < m.size + table.length,則在後面循環put的代碼中存在再次擴容的可能性。

 

舉例說明 當前table.length 爲64,map.size() = 47 < 64*0.75,被添加的Map m.size()=93, loadFactor爲默認值0.75。

targetCapacity = 125,table.length擴容後爲128。

若後續新增不存在重複值,則最後的size爲47+93 = 140 > 128*0.75,因此在循環put期間進行過第二次擴容。

若是本人理解有誤,請幫忙指出,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章