1. 程式人生 > >Java的基本知識

Java的基本知識

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

第二

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的指數。