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 值

相关推荐
quikai19811 小时前
python练习第二组
开发语言·python
AI视觉网奇1 小时前
Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr
开发语言·c++·算法
wjs20241 小时前
并查集快速合并
开发语言
free-elcmacom1 小时前
MATLAB与高等数学<1>一道曲面积分题的几何直观
开发语言·数学建模·matlab·高等数学
LaoZhangGong1231 小时前
深度学习uip中的“psock.c和psock.h”
c语言·开发语言
Tony Bai1 小时前
Go 安全新提案:runtime/secret 能否终结密钥残留的噩梦?
java·开发语言·jvm·安全·golang
oioihoii2 小时前
C++11到C++23语法糖万字详解
java·c++·c++23
pengzhuofan2 小时前
Java演进与与工程师成长
java·开发语言
比昨天多敲两行2 小时前
C++入门基础
开发语言·c++
测试秃头怪2 小时前
2026最新软件测试面试八股文(含答案+文档)
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展