尧图精选

【大白话说Java面试题】【Java基础篇】第21题:HashMap和Hashtable的区别是什么

🕒 发布时间:2026/9/13 18:01:59 📁 来源:尧图网络
大厂规范Java项目工具类 — 07_IP地址提取工具类Java企业级代码第21题HashMap和Hashtable的区别是什么回答相同点数据结构在JDK 1.7及之前HashMap和Hashtable的底层数据结构均为数组链表。但在JDK 1.8中HashMap引入了红黑树优化链表长度≥8时转换而Hashtable仍保持数组链表结构。负载因子两者默认的负载因子都是0.75用于控制扩容的触发条件。不同点1. 线程安全性HashMap是线程不安全的适合单线程场景。Hashtable是线程安全的底层方法基本都用synchronized关键字修饰适合多线程场景。2. 对null的支持HashMap允许允许 key 为 null仅一个允许 value 为 null。Hashtable不允许key或value为null如果key为null会抛出NullPointerException异常。如果value为null也会抛出NullPointerException异常。3. 初始容量与扩容机制初始容量HashMap的初始容量为16。Hashtable的初始容量为11。扩容规则HashMap当已用容量 总容量 × 负载因子时扩容为当前容量的2倍2n。Hashtable当已用容量 总容量 × 负载因子时扩容为当前容量的2倍加12n 1。指定初始容量HashMap扩容后容量始终是2的幂次方。Hashtable直接使用用户指定的容量大小。面试官视角面试官可能会问“为什么HashMap允许null键值而Hashtable不允许”答Hashtable禁止null键值对主要因为其底层实现直接依赖key.hashCode()和value的操作null会直接抛NullPointerException早期设计未做兼容处理同时禁止null可避免get(key)返回null时的歧义无法区分key不存在还是value为null。​HashMap允许null键通过hash(null)0特殊处理和null值因其设计时考虑了更灵活的场景需求但需开发者自行通过containsKey()判断键是否存在。面试官可能会追问“如果需要线程安全的HashMap怎么办”答可以使用Collections.synchronizedMap包装HashMap或者直接使用ConcurrentHashMap。觉得对您有帮助麻烦点点关注啦您的关注是我创作的最大动力~
上一篇/下一篇内容由系统自动关联 返回资讯列表 →