更新時間:2020年09月29日10時24分 來源:傳智播客 瀏覽次數(shù):
(1)問題分析
考官主要考核對于兩個map的區(qū)別。
(2)核心答案講解:
相同點:
HashMap和Hashtable都是存儲“鍵值對(key-value)”的散列表,而且都是采用 拉鏈法實現(xiàn)的。
存儲的思想都是:通過table數(shù)組存儲,數(shù)組的每一個元素都是一個Entry;而 一個 Entry就是一個單向鏈表,Entry鏈表中的每一個節(jié)點就保存了key- value鍵值對數(shù)據(jù)。
不同點:
1) 繼承和實現(xiàn)方式不同
2)線程安全不同
3)對null值的處理不同
4) 支持的遍歷種類不同
5) 通過Iterator迭代器遍歷時,遍歷的順序不同
6)容量的初始值 和 增加方式都不一樣
7) 添加key-value時的hash值算法不同
(3)問題擴展
HashTable中hash數(shù)組默認大小是11,增加的方式是 old*2+1;HashMap中 hash數(shù)組的默認大小是16,而且一定是2的指數(shù);
擴容的臨界點是加載因子loadFactor>0.75,其中l(wèi)oadFactor=size/capaticy
(4)使用場景
在多線程中,我們可以自己對HashMap進行同步,也可以選擇ConcurrentHashMap。當(dāng)HashMap和Hashtable都不能滿足自己的需求時,還可以考慮新定義一個類,繼承或重新實現(xiàn)散列表;當(dāng)然,一般情況下是不需要的了。
猜你喜歡