Java 中 Hashtable 、HashMap 、TreeMap 有什麼不同?
- HashTable 最早期的 Java 類庫提供的一個 Hash表實現,本身是同步的,不支持 null 鍵和值,對同步有導致性能開銷,很少被推薦使用。
- HashMap 是應該更加廣泛的哈希表實現,行爲上與 hashtable 一致,主要區別是 Hashmap 不是同步的,支持null 建和值。 HashMap 進行 put 或者 get 操作,可以達到常熟時間的性能,所以絕大多數場景都使用 HashMap。
- TreeMap 則是基於紅黑樹提供的順序訪問的。與HashMap不同,它的get put remove之類的操作都是 O(log(N))的時間複雜度,具體順序可以通過的 Comparator 或者根據鍵的自然順序來判斷。
Map 整體結構
Hashtable 是擴展了 Dictonary 類,類結構上與 HashMap 之類不同,HashMap 繼承的是 abstractMap
HashMap 等其他 Map 都是擴展了 AbstractMap ,裏面包含了通用方法抽象。
HashMap 的性能表現非常依賴哈希表的有效性。
equals 和 hashcode 基本約定
- equals 相等,hashco