简介之HashMap和Hashtable的区别

HashMap和Hashtable作为Java中的两种哈希表实现,它们在底层结构、线程安全性、null支持、遍历方式和计算hash值方法上存在显著差异。HashMap是非线程安全的,提供更高的运行效率,并在多线程环境中推荐使用ConcurrentHashMap;而Hashtable则是线程安全的,适合多线程环境但效率较低。此外,HashMap允许null键值,而Hashtable不支持。两者的扩容策略和计算hash值的策略也有所不同,HashMap通过位运算提高效率,但也可能导致更高的哈希冲突。
摘要由CSDN通过智能技术生成

 

HashMap和Hashtable的区别

1.底层结构不同

1.1继承体系的区别

HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类(注:此类已过时。新的实现应该实现 Map 接口,而不是扩展此类)。它们都实现了同时实现了Map、Cloneable(可复制)、Serializable(可序列化)这三个接口。
 

1.2内部实现使用的数组初始化和扩容方式不同
Hashtable:
(1) Hashtable继承于Dictionary类,实现了Map接口。Map是"key-value键值对"接口,Dictionary是声明了操作"键值对"函数接口的抽象类。 
(2) Hashtable是通过"拉链法"实现的哈希表。它包括几个重要的成员变量:table, count, threshold, loadFactor, modCount。
  table是一个Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的"key-value键值对"都是存储在Entry数组中的。 
  count是Hashtable的大小,它是Hashtable保存的键值对的数量。 
  threshold是Hashtable的阈值,用于判断是否需要调整Hashtable的容量。threshold的值="容量*加载因子"。
  loadFactor就是加载因子。 
  modCount是用来实现fail-fast机制的

HashMap:
(1) HashMap内存储数据的Entry数组默认是16,如果没有对Entry扩容机制的话,当存储的数据一多,Entry内部的链表会很长,这就失去了HashMap的存储意义了。所以HasnMap内部有自己的扩容机制。HashMap内部有:
    变量size,它记录HashMap的底层数组中已用槽的数量࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值