HashMap幾乎等同於Hashtable,只是HashMap是同步的,並且可以接受null(HashMap可以接受null鍵和值,但Hashtable不能)。
HashMap是不同步的,而Hashtable是同步的,這意味著Hashtable是線程安全的,多個線程可以* * *共享壹個Hashtable;而如果沒有正確的同步,多線程就無法* * *享受HashMap。Java 5提供了ConcurrentHashMap,它是HashTable的替代品,比HashTable更具可擴展性。
另壹個區別是HashMap的叠代器是快速失效叠代器,而Hashtable的枚舉器不是快速失效叠代器。因此,當另壹個線程更改HashMap的結構(添加或刪除元素)時,它將引發並發表征異常,但叠代器本身的remove()方法不會引發並發表征異常。但這不是壹個確定的行為,它取決於JVM。本文也是枚舉和叠代器的區別。
Hashtable是線程安全和同步的,因此在單線程環境中比HashMap慢。如果不需要同步,只需要單線程,那麽使用HashMap比Hashtable更好。
HashMap不能保證地圖中元素的順序不會隨著時間的推移而改變。