Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

HashMap 和 Hashtable 有什么区别?

查看完整题解

参考回答

直接回答

HashMap 不同步,允许一个 null 键及多个 null 值;Hashtable 的常用读写方法有同步保护,不允许 null 键和值。两者都不提供键的排序保证。新代码通常先考虑 HashMap;确实需要并发共享映射时,按操作语义选择 ConcurrentHashMap 或外部同步方案。

讲清原理

Hashtable 的同步主要围绕同一个表对象展开,能保护单次方法调用;它并不会自动把调用方写出的几步业务操作合成一个原子动作。HashMap 少了内置同步约束,适合线程独占或已经由外层锁统一保护的场景。

关注点 HashMap Hashtable
null 键和值都可用 键和值都拒绝
单次读写同步 无内置同步 常用方法同步
选型定位 通用非并发映射 兼容既有代码

例子与易错点

if (!table.containsKey(k)) table.put(k, v); 即使 table 是 Hashtable,两个调用之间仍可能插入别的线程。要实现“只在不存在时写入”,应选择具备所需原子语义的方法,或者把整个判断与写入放在同一把锁中。

“线程安全”要说明保护哪一步;加锁成本也不能直接推导成任何负载下的速度排名。

相关题:第 12 题、第 19 题、第 26 题、第 32 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。