Hashtable、HashMap、TreeMap 有什么区别?
查看完整题解
参考回答
直接回答
HashMap 和 Hashtable 按哈希组织键,TreeMap 按比较规则维护有序键。HashMap 不同步且允许 null 键和值;Hashtable 常用方法同步并拒绝 null;TreeMap 不同步,允许 null 值,自然顺序下拒绝 null 键,定制比较器能够处理 null 时可另行支持。
讲清原理
| 实现 | 查找基础 | 顺序 | 典型基本操作 |
|---|---|---|---|
| HashMap | 哈希与键判等 | 不保证 | 分布良好时通常近 O(1) |
| Hashtable | 哈希与键判等 | 不保证 | 还受同步与负载影响 |
| TreeMap | 比较结果 | 键排序 | get/put/remove 保证 O(log n) |
TreeMap 还提供 floorKey、ceilingKey、subMap 等邻近与范围能力。比较为零的键会被当成同一个键,因此比较器与 equals 的一致性很重要。
例子与易错点
成绩单要按学号取值,HashMap 可能足够;还要找“不超过某编号的最近一项”,TreeMap 的有序导航更贴切。Hashtable 的同步并不能代替整个“查找再更新”流程的原子设计。
别把 HashMap 的某次打印顺序当成承诺;也别以为 TreeMap 会按 value 排序。按值排序需要另外收集条目并指定比较规则。
相关题:第 3 题、第 6 题、第 31 题、第 45 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。