天天看點

HashMap和Hashtable的比較,差別

1 HashMap不是線程安全的

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

2   HashTable是線程安全的一個Collection。

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算法都大概一樣,是以性能不會有很大的差異。

map 的方法:

clear()從 Map 中删除所有映射

remove(Object key)從 Map 中删除鍵和關聯的值

        put(Object key, Object value)将指定值與指定鍵相關聯

get(Object key)傳回與指定鍵關聯的值

        containsKey(Object key)如果 Map 包含指定鍵的映射,則傳回 true

containsValue(Object value)如果此 Map 将一個或多個鍵映射到指定值,則傳回 true

isEmpty()如果 Map 不包含鍵-值映射,則傳回 true size()傳回 Map 中的鍵-值映射的數目

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

有序否 允許元素重複否
Collection
List
Set AbstractSet
HashSet
TreeSet 是(用二叉樹排序)
Map AbstractMap 使用key-value來映射和存儲資料,Key必須惟一,value可以重複
HashMap
TreeMap 是(用二叉樹排序)

繼續閱讀