Java8改進的HashMap和Hashtable實現類

quentain發表於2015-09-17

HashMap和Hashtable都是Map介面的典型實現類,它們之間的關係完全類似於ArrayList和Vector的關係:Hashtable是一個古老的Map實現類,它從JDK1.0起就已經出現了,當它出現時,Java還沒有提供Map介面,所以它包含了兩個繁瑣的方法,即elements()(類似於Map介面定義的values()方法)和keys()(類似於Map介面定義的keySet()方法),現在很少使用這兩個方法(關於這兩個方法的用法請參考)

        Java8改進了HashMap的實現,使用HashMap存在key衝突時依然具有較好的效能。

         除此之外,Hashtable和HashMap存在兩點典型區別。

        (1)Hashtable是一個執行緒安全的Map實現,但HashMap是執行緒不安全的實現,所以HashMap比Hashtable的效能高一點;但如果有多個執行緒訪問同一個Map物件時,使用Hashtable實現類會更好。

 (2)Hashtable不允許使用null作為key和value,如果試圖把null放進Hashtable中,將會引發空指標異常;但HashMap可以使用null作為key或value。

   由於HashMap裡的key不能重複,所以HashMap裡最多隻有一個key-value對的key為null,但可以有無數多個key-value對的value為null.

下面程式示範了用null值作為HashMap的key和value的情形。

package com.zhao.three;

import java.util.HashMap;

public class NullInHashMap {
	public static void main(String[] args) {
		HashMap   hm=new HashMap<>();
		hm.put(null, null);
		hm.put(null, null);
		hm.put("a", null);
		System.out.println(hm);
	}
}

      上面程式試圖向HashMap中放入三個key-value對,其中第二行程式碼處無法將key-value對放入,因為Map中已經有一個key-value對的key為null值,所以無法再放入key為null值的key-value對。第三行程式碼處可以放入該key-value對,因為一個HashMap中可以有多個value為null值。編譯、執行上面程式,看到如下輸出結果;

相關文章