1.rehash的時(shí)候,resize調(diào)用transfer,會(huì)產(chǎn)生循環(huán)鏈表,造成Infinte Loop
2.多線程put的時(shí)候可能導(dǎo)致元素丟失
替代方案:
a. HashTable:線程安全,key和value都不能為null
b. ConcurrentHashMap,線程安全的分段鎖實(shí)現(xiàn)(jdk1.6中采用重入鎖 ReentrantLock來(lái)支持分段寫(xiě),jdk8中采用CAS,直接synchronized,底層仍然采用數(shù)組+鏈表+紅黑樹(shù))
c. synchronizedMap()方法包裝一下HashMap,不常用。
相關(guān)點(diǎn):
LinkedHashMap:有序的map,底層是雙向鏈表;
TreeMap:TreeMap 的實(shí)現(xiàn)就是紅黑樹(shù)數(shù)據(jù)結(jié)構(gòu),是一棵自平衡的排序二叉樹(shù)