HashMap非线程安全但性能高,允许null键和值;2. Hashtable线程安全但性能低,不允许null键和值;3. HashMap继承AbstractMap,Hashtable继承Dictionary;4.推荐使用HashMap或ConcurrentHashMap。

HashMap 和 Hashtable 都是 Java 中用于存储键值对的哈希表实现,但它们在多个方面存在关键差异。了解这些区别有助于在实际开发中做出合适的选择。
线程安全性不同
Hashtable 是线程安全的,它的方法大多是同步的(synchronized),这意味着在多线程环境下可以直接使用,但性能较低。HashMap 不是线程安全的,如果在多线程环境中使用,需要外部同步控制,比如通过 Collections.synchronizedMap() 包装,或者使用 ConcurrentHashMap 替代。
是否允许 null 键和 null 值
HashMap 允许一个 null 键和多个 null 值。例如:
map.put(null, "value1"); map.put("key2", null); 是合法的。
而 Hashtable 不允许任何 null 键或 null 值,否则会抛出 NullPointerException。
性能表现
由于 Hashtable 的方法基本都被 synchronized 修饰,每个操作都要获取锁,因此在单线程环境下性能明显低于 HashMap。HashMap 在非并发场景下更高效,适合大多数普通用途。
继承的父类不同
HashMap 继承自 AbstractMap 类,而 Hashtable 继承自遗留的 Dictionary 类。这使得 HashMap 更符合现代集合框架的设计规范,也支持更多集合操作的统一接口。
立即学习“Java免费学习笔记(深入)”;
基本上就这些。日常开发推荐使用 HashMap,若需线程安全,优先考虑 ConcurrentHashMap 而不是 Hashtable,后者已经基本被废弃。











