当前位置: 首页 > news >正文

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

目录

认识 HashMap 和 HashSet

HashMap

构造方法

HashMap源码分析

数组的初始化

put方法

get方法

HashSet

与 TreeMap/TreeSet 的区别

HashMap 和 TreeMap 的区别

HashSet 和 TreeSet 的区别


认识 HashMap 和 HashSet

HashMap官方文档

HashSet官方文档

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

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

HashMap

构造方法

1. 无参构造方法

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

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 的区别

MapHashMapTreeMap
底层结构哈希桶红黑树
插入/查找/删除的时间复杂度O(1)O(log₂N)
插入/查找/删除的区别通过哈希函数计算哈希地址需要进行元素间的比较
数据是否有序无序关于Key有序
线程是否安全不安全不安全
比较与覆写自定义类型需要覆写equals方法和hashCode方法Key必须是可比较的,否则会抛出ClassCastException异常
使用场景不关心Key是否有序,只关心时间性能需要Key有序

HashSet 和 TreeSet 的区别

MapHashMapTreeMap
底层结构哈希桶红黑树
插入/查找/删除的时间复杂度O(1)O(log₂N)
插入/查找/删除的区别通过哈希函数计算哈希地址按照红黑树的性质进行操作
数据是否有序不一定有序关于Key有序
线程是否安全不安全不安全
比较与覆写自定义类型需要覆写equals方法和hashCode方法Key必须是可比较的,否则会抛出ClassCastException异常
使用场景不关心Key是否有序,只关心时间性能需要Key有序

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

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


http://www.dtcms.com/a/520327.html

相关文章:

  • 什么是跨境电商主要做什么女生seo专员很难吗为什么
  • R语言数据结构与数据处理基础内容
  • 求下列线性变换的矩阵
  • iOS 打包 IPA 全流程详解,签名配置、工具选择与跨平台上传实战指南
  • 前端代码规范:husky+ lint-staged+pre-commit
  • 房地产公司网站源码图片数量 wordpress
  • Qt-UDP
  • Ethernet/ip 转 Modbus RTU 驱动,罗克韦尔 PLC 与华为逆变器打造光伏电站智能监控典范
  • 与创新者同频!与FlagOS共赴开源之约
  • 【C++学习】函数及分文件编写
  • 网站免费推广计划新闻视频网站开发
  • 推进网站集约化建设的作用易企秀h5页面怎么制作
  • 2025年--Lc209- 75. 颜色分类(排序)--Java版
  • 郑州网站维护推广西安网站建设管理
  • 为 Claude Code CLI 提供美观且高度可定制的状态行,具有powerline support, themes, and more.
  • 第156期 适用于RAG的最佳开源嵌入模型 多语言自然语言处理及阿拉伯语文本的高性能开源嵌入模型
  • 公司网站建设需要哪些方面土地流转网站开发
  • Grafana监控可视化
  • GEO数据分析与效果归因:GEO 效果的多维度分析框架
  • 31.stream数据类型应用
  • 蓝牙协议6.1
  • 微服务中的服务熔断、降级与限流
  • 查网站的建站系统百度搜索网站图片
  • 网站界面风格设计描述网站类网站开发犯罪吗
  • 新站点seo联系方式设计工作室网站首页
  • Adobe Lightroom Classic 2025解锁版 (专业照片管理)
  • univla复现libero
  • kubernets的pod管理
  • 14、【Ubuntu】【VSCode】VSCode 断联问题分析:hostname(二)
  • Java 堆排序(Heap Sort)详解教程