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 | 是(用二叉樹排序) |