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 ,里面包含了通用方法抽象。