首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[Java数据结构和算法] HashMap 和 HashSet

[Java数据结构和算法] HashMap 和 HashSet

作者头像
木井巳
发布2025-12-16 09:52:13
发布2025-12-16 09:52:13
1260
举报

认识 HashMap 和 HashSet

HashMap官方文档

HashSet官方文档

HashMap 和 HashSet 是Java中利用哈希表实现的 Map 和 Set。

由于哈希表的 插入/查找/删除 操作的时间复杂度均为 O(1),因此 HashMap 和 HashSet 相关操作的时间复杂度也是 O(1)。

HashMap

构造方法

1. 无参构造方法

创建一个空的 HashMap,长度为数组默认值16,载荷因子为0.75

2. 传入指定长度的构造方法

可见该方法内部调用的是带有两个参数的构造方法(一个是传入的指定长度值,一个是默认的载荷因子)

3. 带有两个参数的构造方法

该构造方法将指定的原来默认的载荷因子改成传入的指定载荷因子,然后将传入的指定数组长度改成2的幂次(比如传入的指定长度为10,返回的值是16,因为16是2的4次方)

4. 传入一个Map的构造方法

所创建的HashMap中将包含所传入的Map中的所有元素。

HashMap源码分析

数组的初始化

若调用无参构造方法,默认的数组长度是16.

当调用put方法,会计算value的哈希值,并且给数组table分配内存

调用put方法后,会给数组分配默认内存大小,为16。

put方法

get方法

若getNode返回的为空,表示没有找到,返回空;若返回一个节点,则返回该节点的value。

以下是具体操作图示:

HashSet

和 TreeSet 底层是 TreeMap 一样,HashSet 的底层也是 HashSet。

它的四个构造方法都是通过 HashMap 来实现的。

1. 无参构造方法

2. 传入指定数组长度的构造方法

3. 传入指定数组长度和载荷因子的构造方法

4. 传入一个集合的构造方法

add 和 remove 等操作也都是通过 Map 的操作来实现的

与 TreeMap/TreeSet 的区别

HashMap 和 TreeMap 的区别

Map

HashMap

TreeMap

底层结构

哈希桶

红黑树

插入/查找/删除的时间复杂度

O(1)

O(log₂N)

插入/查找/删除的区别

通过哈希函数计算哈希地址

需要进行元素间的比较

数据是否有序

无序

关于Key有序

线程是否安全

不安全

不安全

比较与覆写

自定义类型需要覆写equals方法和hashCode方法

Key必须是可比较的,否则会抛出ClassCastException异常

使用场景

不关心Key是否有序,只关心时间性能

需要Key有序

HashSet 和 TreeSet 的区别

Map

HashSet

TreeSet

底层结构

哈希桶

红黑树

插入/查找/删除的时间复杂度

O(1)

O(log₂N)

插入/查找/删除的区别

通过哈希函数计算哈希地址

按照红黑树的性质进行操作

数据是否有序

不一定有序

关于Key有序

线程是否安全

不安全

不安全

比较与覆写

自定义类型需要覆写equals方法和hashCode方法

Key必须是可比较的,否则会抛出ClassCastException异常

使用场景

不关心Key是否有序,只关心时间性能

需要Key有序

感谢观看!希望读者朋友们能够学到东西。

若有不对的,请尽管指出 ~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 认识 HashMap 和 HashSet
  • HashMap
    • 构造方法
  • HashMap源码分析
    • 数组的初始化
    • put方法
    • get方法
  • HashSet
  • 与 TreeMap/TreeSet 的区别
    • HashMap 和 TreeMap 的区别
    • HashSet 和 TreeSet 的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档