共同點:
都是Java 的集合類,都可以用來存放Java對象。
不同點:
1、HashMap是非線程安全的。
HastMap是一個接口 是map接口的子接口,是將鍵映射到值的對象,其中鍵和值都是對象。HashMap允許null Key,null Value,而Hashtable是不允許的。
2、Hashtable是線程安全的一個Coillection。
具體來說:
A、HastMap 是Hashtable輕量級的應用實現(非線程安全的應用實現)。他們都完成了Map接口,其區別在於Map允許null Key ,null Value ,由於非線程安全,因此運行效率上會高於Hashtable。
B、Hashtable不允許允許將null作爲一個entry的key或者value。 HashMap是把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因爲contains方法容易讓人引起誤解。
C、最大的不同:Hashtable的方法Synchronize 的,因此是線程安全的;HashMap的方法不是Synchronize的,因此是非線程安全的。
D、Hashtable和HashMap採用的hash/rehash算法大概一樣,所以性能不會有很大的差。
總結:
HashMap | 非線程安全 | 允許有null的鍵和值 | 效率高一點 | 方法不是Synchronize的, 要提供外同步 |
有containsvalue和 containsKey方法 |
HashMap 是Java1.2 引進的 Map interface 的一個實現 |
HashMap是Hashtable 的輕量級實現 |
Hashtable | 線程安全 | 不允許有null的鍵和值 | 效率稍低 | 方法是是Synchronize的 | 有contains方法方法 | Hashtable 繼承於 Dictionary 類 |
Hashtable比HashMap要舊 |