hashmap 與hashtable區別(學習工廠模式筆記)

1 HashMap不是線程安全的(是因爲HashMap是沒有實現synchronization,多個線程訪問會造成混亂)

            HashMap是map接口的子類,是將鍵映射到值的對象,其中鍵和值都是對象,並且不能包含重複鍵,但可以包含重複值。HashMap允許null key和null value,而hashtable不允許。

2   HashTable是線程安全。(是因爲HashTable,實現同步鎖,)

HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap允許空(null)鍵值(key),由於非線程安全,效率上可能高於Hashtable。

HashMap允許將null作爲一個entry的key或者value,而Hashtable不允許。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因爲contains方法容易讓人引起誤解。 Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己爲它的方法實現同步,而HashMap 就必須爲之提供外同步。 Hashtable和HashMap採用的hash/rehash算法都大概一樣,所以性能不會有很大的差

 

複製代碼
public static void main(String args[]) {

        HashTable h=new HashTable();

        h.put("用戶1",new Integer(90));

        h.put("用戶2",new Integer(50));

        h.put("用戶3",new Integer(60));

        h.put("用戶4",new Integer(70));

        h.put("用戶5",new Integer(80));

        Enumeration e=h.elements();

        while(e.hasMoreElements()){

        System.out.println(e.nextElement());
    }
複製代碼

 

 

總結:

hashmap

線程不安全

允許有null的鍵和值

效率高一點、

方法不是Synchronize的要提供外同步

有containsvalue和containsKey方法

HashMap 是Java1.2 引進的Map interface 的一個實現

HashMap是Hashtable的輕量級實現

hashtable

線程安全

不允許有null的鍵和值

效率稍低、

方法是是Synchronize的

有contains方法方法

、Hashtable 繼承於Dictionary 類

Hashtable 比HashMap 要舊

 

這些都代表了Jav



a中的集合,這裏主要從其元素是否有序,是否可重複來進行區別記憶,以便恰當地使用,當然還存在同步方面的差異。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章