HashMap 与 HashTable 区别

HashMap

  • HashMap是一个基于 hash 表实现的 K-V 结构的集合。

  • HashMap 是 JDK1.2 引入的一个线程不安全的集合类。

  • HashMap 内部是采用了数组加链表实现,在 JDK1.8 版本里面做了优化,引入了红黑树。当链表长度大于等于 8 并且数组长度大于 64 的时候,就会把链表转化为红黑树,提升数据查找性能。

HashTable

  • Hashtable是一个基于 hash 表实现的 K-V 结构的集合。

  • Hashtable 是 JDK1.0 引入的一个线程安全的集合类,因为所有数据访问的方法都加了一个 Synchronized 同步锁。

  • Hashtable 内部采用数组加链表来实现,链表用来解决 hash 冲突的问题。

HashMap 与 HashTable 区别

从功能特性的角度来说:

  • HashTable 是线程安全的,而 HashMap 不是。

  • HashMap 的性能要比 HashTable 更好,因为,HashTable 采用了全局同步锁来保证安全性,对性能影响较大

从内部实现的角度来说:

  • HashTable 使用数组加链表、HashMap 采用了数组+链表+红黑树
  • HashMap 初始容量是 16、HashTable 初始容量是 11
  • HashMap 可以使用 null 作为 key,HashMap 会把 null 转化为 0 进行存储, 而 Hashtable 不允许。

最后,他们两个的 key 的散列算法不同,HashTable 直接是使用 key 的 hashcode 对数组长度做取模。而 HashMap 对 key 的 hashcode 做了二次散列,从而避免 key 的分布不均匀问题影响到查询性能。

相关推荐
十年Java程序媛29 分钟前
深度实战:JDK21 虚拟线程 + HikariCP 生产正确配比、坑点、监控全套
java·spring boot
xiaoqiMikko37 分钟前
有人在搜一个不存在的 Tomcat 版本
java·tomcat
用户3126874877204 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang4 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot
SimonKing4 小时前
升级Spring Boot 4后,从 Jackson 2 到 3,到底有哪些变化
java·后端·程序员
吃饱了得干活5 小时前
一篇讲清楚Spring Boot:自动装配、启动器、过滤器、拦截器、设计模式
java·spring boot·后端
lhldsg6 小时前
AI零售系统实战指南:从架构设计到落地部署全解析
java·人工智能·小程序·uni-app·零售
Interview Aid1126 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
mldong6 小时前
换了工作流引擎,前端一行代码没改
java·架构
CoderIsArt14 小时前
C#中UI 线程与 Dispatcher
开发语言·ui·c#