1. 程式人生 > >HashMap與HashTable的區別

HashMap與HashTable的區別

存在 tle static www. rehash ring fix 進行 容易

HashMap和Hashtable的區別

導讀:

1 HashMap不是線程安全的

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

2 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 要舊

這些都代表了Java中的集合,這裏主要從其元素是否有序,是否可重復來進行區別記憶,以便恰當地使用,當然還存在同步方面的差異,見上一篇相關文章

來源 http://www.cnblogs.com/langtianya/archive/2013/03/19/2970273.html

HashMap與HashTable的區別

HashMap與HashTable的區別