你真的知道HashMap与Hashtable的区别与关系吗?【底层讲解】

本文详细对比了HashMap与Hashtable的差异,包括它们的产生时期、线程安全性、API区别、对null键值的支持、遍历方式、容量规则以及哈希算法。HashMap在JDK1.8引入了红黑树提高查询效率,而Hashtable线程安全但效率较低,已被弃用。了解这些差异有助于在面试和实践中选择合适的数据结构。
摘要由CSDN通过智能技术生成

一、简介及相同点

1、产生时期

      Hashtable是Java最早版本(JDK1.0)就发布的一种提供键值映射(Key-Value)的数据类型,而HashMap产生于JDK1.2。

      虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了。而HashMap已经成为应用最为广泛的一种数据类型了。造成这样的原因一方面是因为Hashtable是线程安全的,效率比较低。另外Hashtable没有遵循驼峰命名法,不是HashTable(次要原因)
在这里插入图片描述

2、简介(区别中都有详细介绍)

(1)Hashtable是基于哈希表实现的,每个元素是一个Key-Value键值对,其内部也是通过单链表解决冲突问题,容量不足(超过了阈yù值,默认是11)时,同样会自动增长(下面会详细介绍).

(2)HashMap在JDK1.7及其之前实现都是哈希表(也叫哈希数组)+ 链表(解决hash冲突),JDK1.8及之后引入了红黑树。引入红黑树是为了提高查询数据的效率(数据增多会使链表的查询效率越来越低)。那么什么时候将链表转换为红黑树呢?

      链表转换为红黑树的两个条件:首先得要求当前链表长度要大于 8 ,并且要求桶(哈希数组)的长度大于 64,此时才会变为红黑树,不然只会进行扩容。

(3)这两者都实现了Map、Cloneable(可复制)、Serializable(可序列化)这三个接口。另外:HashMap 和 Hashtable 都来自 java.Util 工具包

3、相同点

(1)存储结构相同:都是用哈希表来存储数据的;

(2)解决hash冲突方案相同:都是用链表来解决的。

      ①通过Key-Value和一种哈希算法得到hashCode,再通过hashCode作位运算以此数作为哈希表的下标位置(JDK 1.8思路)。

      ②当计算出来的下标位置相同(专业术语叫hash冲突)时,就会调用当前要插入元素的 equals 方法与已经存在的元素进行一对一的比较。

   

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值