HashMap和Hashtable的區(qū)別
導讀:
1 .HashMap不是線程安全的
HashMap是map接口的子類,是將鍵映射到值的對象翼虫,其中鍵和值都是對象屑柔,并且不能包含重復鍵珍剑,但可以包含重復值掸宛。HashMap允許null key和null value招拙,而hashtable不允許。
2?. ?HashTable是線程安全别凤。
HashMap是Hashtable的輕量級實現(xiàn)(非線程安全的實現(xiàn)),他們都完成了Map接口闻妓,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全掠械,效率上可能高于Hashtable由缆。
HashMap允許將null作為一個entry的key或者value猾蒂,而Hashtable不允許均唉。 HashMap把Hashtable的contains方法去掉了肚菠,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解蚊逢。 Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現(xiàn)烙荷。 最大的不同是,Hashtable的方法是Synchronize的终抽,而HashMap不是,在多個線程訪問Hashtable時昼伴,不需要自己為它的方法實現(xiàn)同步,而HashMap 就必須為之提供外同步圃郊。 Hashtable和HashMap采用的hash/rehash算法都大概一樣价涝,所以性能不會有很大的差
publicstaticvoidmain(String args[]) {
HashTable h=newHashTable();
h.put("用戶1",newInteger(90));
h.put("用戶2",newInteger(50));
h.put("用戶3",newInteger(60));
h.put("用戶4",newInteger(70));
h.put("用戶5",newInteger(80));
Enumeration e=h.elements();while(e.hasMoreElements()){
System.out.println(e.nextElement());
}
總結(jié):
hashmap : 線程不安全;
允許有null的鍵和值;
效率高一點
;方法不是Synchronize的要提供外同步;
有containsvalue和containsKey方法;HashMap 是Java1.2 引進的Map interface 的一個實現(xiàn)
HashMap是Hashtable的輕量級實現(xiàn)
hashtable
線程安全
不允許有null的鍵和值
效率稍低持舆、
方法是是Synchronize的
有contains方法方法
鞭光、Hashtable 繼承于Dictionary 類
Hashtable 比HashMap 要舊
這些都代表了Java中的集合,這里主要從其元素是否有序泞遗,是否可重復來進行區(qū)別記憶惰许,以便恰當?shù)厥褂檬氛蓿斎贿€存在同步方面的差異,見上一篇相關(guān)文章聊倔。