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 值

相关推荐
十五年专注C++开发1 分钟前
libuv:一个跨平台的C++异步 I/O 库
开发语言·c++·node.js·libuv·vlibuv
yaoxin5211232 分钟前
358. Java IO API - 使用 relativize() 创建路径之间的相对关系
java·linux·python
SuperEugene4 分钟前
前端 console 日志规范实战:高效调试 / 垃圾 log 清理与线上安全避坑|编码语法规范篇
开发语言·前端·javascript·vue.js·安全
程序员敲代码吗5 分钟前
USB-C接口深度测试:从Vconn到电压的全方位分析
c语言·开发语言
武藤一雄14 分钟前
C#常见面试题100问 (第一弹)
windows·microsoft·面试·c#·.net·.netcore
racerun14 分钟前
跳转链接批量解析工具 python
开发语言·python
发现一只大呆瓜14 分钟前
Vue - @ 事件指南:原生 / 内置 / 自定义事件全解析
前端·vue.js·面试
庞轩px19 分钟前
HotSpot详解——符号引用、句柄池、直接指针的终极解密
java·jvm·设计模式·内存·虚拟机·引用·klass
qq_4176950532 分钟前
C++中的解释器模式
开发语言·c++·算法
難釋懷42 分钟前
初识Caffeine
java·缓存