HashMap 与 Hashtable 区别
面试官问:"HashMap 和 Hashtable 有什么区别?"
候选人小尤答:"Hashtable 是线程安全的,HashMap 不是。"
面试官点点头:"那为什么生产中很少用 Hashtable?"
小尤说:"因为性能差?"
面试官追问:"具体哪些操作性能差?为什么?"
小尤答不上来。
【面试官心理】 这道题考查的是候选人对并发编程和集合框架演进的理解。能说出"全局 synchronized"和"不能存 null key"的候选人,说明真正理解过为什么 Hashtable 被淘汰。
一、核心区别对比表 🔴
二、Hashtable 的线程安全问题 🔴
2.1 全部方法加 synchronized
问题:每次访问都需要获取整个 Hashtable 对象的锁,高并发下性能极差。
2.2 为什么被淘汰
2.3 ConcurrentHashMap 的解决方案
三、null 限制的差异 🔴
3.1 Hashtable 不允许 null
3.2 HashMap 允许 null
3.3 为什么 Hashtable 不允许 null
四、Collections.synchronizedMap 的陷阱 🟡
4.1 原子操作问题
五、选型建议 🔴
【面试官心理】 能说出 Collections.synchronizedMap 的原子操作陷阱的候选人,说明有并发编程的实战经验。这是 P6 的要求。