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