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