雖然我們在開發中會經常用到HashMap和HashTable,HashMap和Hashtable都實現了Map接口,但決定用哪一個之前先要弄清楚它們之間的分別。但它們的區別是什么呢?我自己都有點忘了,哈哈,來復習下。下面我們先看兩個類。
主要的區別有:線程安全性,同步(synchronization),以及速度####
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
HashTable

HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,
主要區別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
異同.jpg
最大的不同是,
Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步(Collections.synchronizedMap)。
Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。