1) hashmap的數(shù)據(jù)結(jié)構(gòu)
Hashmap是1個數(shù)組和鏈表的結(jié)合體(在數(shù)據(jù)結(jié)構(gòu)稱“鏈表散列“),以下圖示:
當我們往hashmap中put元素的時候,先根據(jù)key的hash值得到這個元素在數(shù)組中的位置(即下標),然后就能夠把這個元素放到對應(yīng)的位置中了。如果這個元素所在的位子上已寄存有其他元素了,那末在同1個位子上的元素將以鏈表的情勢寄存,新加入的放在鏈頭,最早加入的放在鏈尾。
2)使用
Map map = new HashMap(); map.put("Rajib Sarma","100"); map.put("Rajib Sarma","200");//The value "100" is replaced by "200". map.put("Sazid Ahmed","200"); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object val = entry.getValue(); }
2. HashTable和HashMap區(qū)分
第1,繼承不同。
public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map
第2
Hashtable 中的方法是同步的,而HashMap中的方法在缺省情況下是非同步的。在多線程并發(fā)的環(huán)境下,可以直接使用Hashtable,但是要使用HashMap的話就要自己增加同步處理了。
第3
Hashtable中,key和value都不允許出現(xiàn)null值。
在HashMap中,null可以作為鍵,這樣的鍵只有1個;可以有1個或多個鍵所對應(yīng)的值為null。當get()方法返回null值時,便可以表示 HashMap中沒有該鍵,也能夠表示該鍵所對應(yīng)的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是不是存在某個鍵, 而應(yīng)當用containsKey()方法來判斷。
第4,兩個遍歷方式的內(nèi)部實現(xiàn)上不同。
Hashtable、HashMap都使用了 Iterator。而由于歷史緣由,Hashtable還使用了Enumeration的方式 。
第5
哈希值的使用不同,HashTable直接使用對象的hashCode。而HashMap重新計算hash值。
第6
Hashtable和HashMap它們兩個內(nèi)部實現(xiàn)方式的數(shù)組的初始大小和擴容的方式。HashTable中hash數(shù)組默許大小是11,增加的方式是 old*2+1。HashMap中hash數(shù)組的默許大小是16,而且1定是2的指數(shù)。
學(xué)習(xí)Java的同學(xué)注意了!!!
學(xué)習(xí)進程中遇到甚么問題或想獲得學(xué)習(xí)資源的話,歡迎加入Java學(xué)習(xí)交換群,群號碼:183993990 我們1起學(xué)Java!