1. HashMap
1) hashmap的資料結構
Hashmap本質就是一個數組,隻是當key值重複時,使用連結清單的方式來存儲重複的key值(拉鍊法),注意:連結清單中存放的仍然是key值。如下圖示:

當我們往hashmap中put元素的時候,先根據key的hash值得到這個元素在數組中的位置(即下标),然後就可以把這個元素放到對應的位置中了。如果這個元素所在的位子上已經存放有其他元素了,那麼在同一個位子上的元素将以連結清單的形式存放,新加入的放在鍊頭,最先加入的放在鍊尾。
2)使用
2. HashTable和HashMap差別
第一,繼承不同。
第二
Hashtable 中的方法是同步的,而HashMap中的方法在預設情況下是非同步的。在多線程并發的環境下,可以直接使用Hashtable,但是要使用HashMap的話就要自己增加同步處理了。
第三
Hashtable中,key和value都不允許出現null值。
在HashMap中,null可以作為鍵,這樣的鍵隻有一個;可以有一個或多個鍵所對應的值為null。當get()方法傳回null值時,即可以表示 HashMap中沒有該鍵,也可以表示該鍵所對應的值為null。是以,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。
第四,兩個周遊方式的内部實作上不同。
Hashtable、HashMap都使用了 Iterator。而由于曆史原因,Hashtable還使用了Enumeration的方式 。
第五
哈希值的使用不同,HashTable直接使用對象的hashCode。而HashMap重新計算hash值。
第六
Hashtable和HashMap它們兩個内部實作方式的數組的初始大小和擴容的方式。HashTable中hash數組預設大小是11,增加的方式是 old*2+1。HashMap中hash數組的預設大小是16,而且一定是2的指數。