一 . 歷史原因 :Hashtable 是基于陳舊的 Dictionary 類的, HashMap 是 java 1.2 引進(jìn)的 Map 接口的一個 實(shí)現(xiàn)。二 . 同步性 :Hashtable 是線程安全的,也就是說是同步的,而 HashMap 是線程序不安全的,不是同步的。三 . 值:只有 HashMap 可以讓你將空值作為一個表的條目的 key 或 value。
四 . HashMap 是 Hashtable 的輕量級實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)) ,他們都完成了 Map 接口,主要區(qū)別 在于 HashMap 允許空( null )鍵值( key ) , 由于非線程安全,效率上可能高于 Hashtable 。 HashMap 允許將 null 作為一個 entry 的 key 或者 value ,而 Hashtable 不允許。 HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey 。 因?yàn)?contains 方法容易讓人引起誤解。
Hashtable 繼承自 Dictionary 類,而 HashMap 是 Java1.2 引進(jìn)的 Map interface 的一個實(shí)現(xiàn)。最大的不同是, Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在多個線程訪問Hashtable 時,不需要自己為它的方法實(shí)現(xiàn)同步,而 HashMap 就必須為之提供外同步。Hashtable 和 HashMap 采用的 hash/rehash 算法都大概一樣,所以性能不會有很大的差異。
新聞熱點(diǎn)
疑難解答