Map是一個映射接口,其中的每個元素都是一個key-value鍵值對,同樣抽象類AbstractMap通過適配器模式實現了Map接口中的大部分函數,TreeMap、HashMap、WeakHashMap等實現類都通過繼承AbstractMap來實現,另外,不常用的HashTable直接實現了Map接口,它和Vector都是JDK1.0就引入的集合類。
HashMap:
1、HashMap中key和value都允許為null
2、線程不安全。為實現線程安全,可以Collections.synchronizedMap()方法來獲取一個線程安全的集合
3、HashMap在不指定容量的情況下的默認容量為16,HashMap底層數組的容量要求一定為2的整數次冪
4、加載因子是哈希表在其容量自動增加之前可以達到多滿的一種尺度,當哈希表中的條目數超出了加載因子與當前容量的乘積時,則要對該哈希表進行 resize 操作(即擴容)。默認為0.75
5、如果key為null,則直接從哈希表的第一個位置table[0]對應的鏈表上查找。如果key不為null,則先求的key的hash值,根據hash值找到在table中的索引。
1、HashTable中key和value都不允許為null
2、線程安全的,用于多線程下
3、HashTable在不指定容量的情況下的默認容量為11,HashTable不要求底層數組的容量一定要為2的整數次冪
1、二者的存儲結構(哈希表--》數組+鏈表)和解決沖突的方法都是相同的。
1、兩者計算hash的方法不同,Hashtable計算hash是直接使用key的hashcode對table數組的長度直接進行取模
2、線程安全性
3、初始化容量
4、HashMap是對Map接口的實現,HashTable實現了Map接口和Dictionary抽象類
5、HashMap可以使用null作為key,而Hashtable則不允許null作為key
新聞熱點
疑難解答