當前位置:編程學習大全網 - 源碼下載 - Map接口,HashMap和HashTable的相同點和不同點分別是什麽?

Map接口,HashMap和HashTable的相同點和不同點分別是什麽?

Hashtable和HashMap的區別:

1.Hashtable是Dictionary的子類,HashMap是Map接口的壹個實現類;

2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情況下是非同步的。即是說,在多線程應用程序中,不用專門的操作就安全地可以使用Hashtable了;而對於HashMap,則需要額外的同步機制。但HashMap的同步問題可通過Collections的壹個靜態方法得到解決:

Map Collections.synchronizedMap(Map m)

這個方法返回壹個同步的Map,這個Map封裝了底層的HashMap的所有方法,使得底層的HashMap即使是在多線程的環境中也是安全的。

3.在HashMap中,null可以作為鍵,這樣的鍵只有壹個;可以有壹個或多個鍵所對應的值為null。當get()方法返回null值時,即可以表示HashMap中沒有該鍵,也可以表示該鍵所對應的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵,而應該用containsKey()方法來判斷。

Map

├Hashtable

├HashMap

└WeakHashMap

Map接口

請註意,Map沒有繼承Collection接口,Map提供key到value的映射。壹個Map中不能包含相同的key,每個key只能映射壹個value。Map接口提供3種集合的視圖,Map的內容可以被當作壹組key集合,壹組value集合,或者壹組key-value映射。Hashtable類

Hashtable繼承Map接口,實現壹個key-value映射的哈希表。任何非空(non-null)的對象都可作為key或者value。

添加數據使用put(key, value),取出數據使用get(key),這兩個基本操作的時間開銷為常數。

Hashtable通過initial capacity和load factor兩個參數調整性能。通常缺省的load factor0.75較好地實現了時間和空間的均衡。增大load factor可以節省空間但相應的查找時間將增大,這會影響像get和put這樣的操作。

使用Hashtable的簡單示例如下,將1,2,3放到Hashtable中,他們的key分別是”one”,”two”,”three”:

Hashtable numbers = new Hashtable();

numbers.put(“one”, new Integer(1));

numbers.put(“two”, new Integer(2));

numbers.put(“three”, new Integer(3));

要取出壹個數,比如2,用相應的key:

Integer n = (Integer)numbers.get(“two”);

System.out.println(“two = ” + n);

由於作為key的對象將通過計算其散列函數來確定與之對應的value的位置,因此任何作為key的對象都必須實現hashCode和equals方法。hashCode和equals方法繼承自根類Object,如果妳用自定義的類當作key的話,要相當小心,按照散列函數的定義,如果兩個對象相同,即obj1.equals(obj2)=true,則它們的hashCode必須相同,但如果兩個對象不同,則它們的hashCode不壹定不同,如果兩個不同對象的hashCode相同,這種現象稱為沖突,沖突會導致操作哈希表的時間開銷增大,所以盡量定義好的hashCode()方法,能加快哈希表的操作。

如果相同的對象有不同的hashCode,對哈希表的操作會出現意想不到的結果(期待的get方法返回null),要避免這種問題,只需要牢記壹條:要同時復寫equals方法和hashCode方法,而不要只寫其中壹個。

Hashtable是同步的。HashMap類

HashMap和Hashtable類似,不同之處在於HashMap是非同步的,並且允許null,即null value和nullkey。,但是將HashMap視為Collection時(values()方法可返回Collection),其叠代子操作時間開銷和HashMap的容量成比例。因此,如果叠代操作的性能相當重要的話,不要將HashMap的初始化容量設得過高,或者load factor過低。WeakHashMap類

WeakHashMap是壹種改進的HashMap,它對key實行“弱引用”,如果壹個key不再被外部所引用,那麽該key可以被GC回收。

  • 上一篇:求 高手 把這個大智慧的指標改成 通達信的
  • 下一篇:vb獲取內存信息?
  • copyright 2024編程學習大全網