1. HashMap數組
1) hashmap的數據結構 數據結構
Hashmap是一個數組和鏈表的結合體(在數據結構稱「鏈表散列「),以下圖示:多線程
當咱們往hashmap中put元素的時候,先根據key的hash值獲得這個元素在數組中的位置(即下標),而後就能夠把這個元素放到對應的位置中了。若是這個元素所在的位子上已經存放有其餘元素了,那麼在同一個位子上的元素將以鏈表的形式存放,新加入的放在鏈頭,最早加入的放在鏈尾。併發
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區別對象
第一,繼承不一樣。繼承
public class Hashtable extends Dictionary implements Map
public class HashMap extends AbstractMap implements Map
第二get
Hashtable 中的方法是同步的,而HashMap中的方法在缺省狀況下是非同步的。在多線程併發的環境下,能夠直接使用Hashtable,可是要使用HashMap的話就要本身增長同步處理了。同步
第三hash
Hashtable中,key和value都不容許出現null值。
在HashMap中,null能夠做爲鍵,這樣的鍵只有一個;能夠有一個或多個鍵所對應的值爲null。當get()方法返回null值時,便可以表示 HashMap中沒有該鍵,也能夠表示該鍵所對應的值爲null。所以,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。
第四,兩個遍歷方式的內部實現上不一樣。
Hashtable、HashMap都使用了 Iterator。而因爲歷史緣由,Hashtable還使用了Enumeration的方式 。
第五
哈希值的使用不一樣,HashTable直接使用對象的hashCode。而HashMap從新計算hash值。
第六