HashMap 和 HashTable的异同

HashMap:作为Map的主要实现类;线程不安全的,效率高;存储null的key和value,扩容的话是原来的二倍

Hashtable:作为古老的实现类;线程安全的,效率低;不能存储null的key和value

扩容的话是原来的二倍+1

Propertie:常用来处理配置文件。key和value都是String类型

HashMap的底层:数组+链表 (jdk7及之前) , 数组+链表+红黑树 (jdk 8)

相同点:

(1) 都是java.util包下的类

(2) 都实现了Map接口,存储方式都是key-value形式

(3) 同时也都实现了Serializable和Cloneable接口

(4) 负载因子都是0.75

负载因子(loadFactor):

当我们第一次创建 HashMap 的时候,就会指定其容量(如果未明确指定,默认是 16),随着我们不断的向 HashMap 中 put 元素的时候,就有可能会超过其容量,那么就需要有一个扩容机制。 所谓扩容,就是扩大 HashMap 的容量,在向 HashMap中添加元素过程中,如果 元素个数(size)超过临界值(threshold)的时候,就会进行自动扩容(resize),并且,在扩容之后,还需要对 HashMap 中原有元素进行rehash,即将原来桶中的元素重新分配到新的桶中。

在 HashMap 中,临界值(threshold) = 负载因子(loadFactor) * 容量(capacity)。 loadFactor 是装载因子(负载因子),表示 HashMap 满的程度,默认值为 0.75f,也就是说默认情况下,当 HashMap 中元素个数达到了容量的 3/4 的时候就会进行自动扩容。

不同点:

(1) HashMap是非线程安全,效率高;HashTable是线程安全的,效率低

(2) HashMap允许null作为键或值,HashTable不允许,运行时会报NullPointerException

(3) HashMap添加元素使用的是自定义hash算法,HashTable使用的是key的hashCode

(4) HashMap在数组+链表的结构中引入了红黑树,HashTable没有

(5) HashMap初始容量为16,HashTable初始容量为11

(6) HashMap扩容是当前容量翻倍,HashTable是当前容量翻倍+1

(7) HashMap只支持Iterator遍历,HashTable支持Iterator和Enumeration

(8) HashMap与HashTable的部分方法不同,比如HashTable有contains方法。

相关推荐
weixin_4492900119 小时前
uv打包Python为exe步骤
开发语言·python·uv
Flittly19 小时前
【SpringAIAlibaba新手村系列】(9)Text to Image 文本生成图像技术
java·spring boot·agent
Flittly19 小时前
【SpringAIAlibaba新手村系列】(10)Text to Voice 文本转语音技术
java·spring boot·agent
诸葛大钢铁19 小时前
Java实现Excel文件合并
java·windows·excel
黎明丶之前19 小时前
Spring Cloud Gateway 升级与 Bucket4j 限流实践
java·spring cloud
程序员木圭19 小时前
05-告别逻辑混乱!Java 流程控制让代码学会"判断和循环"
java·后端
yaaakaaang19 小时前
三、抽象工厂模式
java·抽象工厂模式
kongba00719 小时前
复刻 Claude Code 项目御马术缰绳系统 harness engineering 落地蓝图
java·linux·服务器
tERS ERTS19 小时前
Spring Cloud gateway 路由规则
java
ZUNr119 小时前
手写一个迷你版 @Column:注解到底是怎么工作的?
java