HashMap 和 Hashtable 有什么区别?

1、典型回答

HashMap 和 Hashtable 都实现了 Map 接口,都是用来存储键值对的数据结构。

它们的区别主要有以下几点:

  1. 线程安全性: HashMap 是非线程安全的,而 Hashtable 是线程安全的
  2. null 键和 null 值的支持: HashMap 允许键和值都为 null,即可以插入 null 键和 null 值; 而 Hashtable 不允许键或值为 null,如果尝试插入 null 键或 null 值,会抛出NullPointerException。
  3. **性能:**由于 HashMap 不是线程安全的,在单线程环境下通常有更好的性能。Hashtable 是线程安全的,但会带来额外的同步开销,因此在单线程环境下性能可能较差。

2、全面剖析

HashMap 和 Hashtable 都实现了 Map 接口,都是用来存储键值对的数据结构

Hashtable 诞生于JDK 1.0,而 HashMap 诞生于JDK 1.2,是用来在单线程下替代 Hashtable 的,而在多线程下要使用 ConcurrentHashMap 替代 Hashtable。

HashMap 和 Hashtable 的区别主要线程安全不同,Hashtable 使用了 synchronized 修饰方法,所以它是线程安全的,而 HashMap 是非线程安全的, 又因为 Hashtable 使用 synchronized 加锁,所以在单线程下,它的性能不如HashMap;最后是 HashMap 支持键、值都允许插入 null,而 Hashtable 不允许 nul 键或 nul值.

3、知识扩展

为什么 Hashtable 不允许插入 null 键和 null 值

相关推荐
极小狐14 分钟前
极狐GitLab 18.5 正式发布,更新 Maven 虚拟仓库 UI(Beta)、全新个人主页、实例级合规与安全策略管理 以及 DAST 认证脚本 等
java·gitlab·maven
沐怡旸27 分钟前
【底层机制】LeakCanary深度解析:从对象监控到内存泄漏分析的完整技术体系
android·面试
王元_SmallA29 分钟前
【玩转全栈】----Django基本配置和介绍
java·后端
froginwe1130 分钟前
HTML5 测验
开发语言
Moonbit44 分钟前
招募进行时 | MoonBit AI : 程序语言 & 大模型
前端·后端·面试
LiuYaoheng1 小时前
【Android】Drawable 基础
android·java
AlianNiew1 小时前
从源码到实战:用 Java 打造“限时+防重放”的文件安全预览链接
java·后端
uhakadotcom1 小时前
基于 TOON + Next.js 来大幅节省 token 并运行大模型
前端·面试·github
星梦清河1 小时前
Redis(四):缓存击穿及其解决方案(SpringBoot+mybatis-plus)
spring boot·redis·缓存
null or notnull2 小时前
java服务器空间不够时:将多个服务器的文件存放至同一个服务器上(使用映射器的办法)
java·运维·服务器·java-ee