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

数据结构底层之HashMap(面经篇1)

1 . 讲一下hashmap的数据结构

   HashMap是一种基于哈希表实现的数据结构,通常用于关联键值对,其中键是唯一的,而值可以重复。在Java中,HashMapjava.util.Map接口的一个实现,它提供了快速的查找、插入和删除操作。

数据结构

HashMap的核心结构包括以下组成部分:

  1. 数组HashMap的底层是一个数组,这个数组的每个位置(通常称为“桶”或“槽”)可以存放一个或多个键值对。数组的大小通常是2的幂,以便能够高效地进行哈希值到数组索引的转换。

  2. 链表或红黑树:在数组的每个位置,如果多个键的哈希值映射到同一个数组索引上(这种情况称为哈希冲突),那么这些键值对会被组织成一个链表或者在某些情况下是红黑树。从Java 8开始,当链表中的节点超过一定阈值(默认为8)且数组达到最小大小(默认为64),链表会转换为红黑树,以提高查找效率。

  3. 节点(Node):每个键值对被封装在一个节点对象中,这个对象包含了键、值、哈希码和指向下一个节点的引用。在Java 8中,为了支持链表和红黑树的转换,引入了更复杂的节点类型,如  TreeNode

工作原理

  1. 哈希函数:当插入一个新的键值对时,首先会计算键的哈希码,这通常由键对象的hashCode()方法提供。然后,这个哈希码经过一定的运算(如按位与运算)被转换为数组索引。

  2. 冲突解决:如果两个或更多键的哈希值映射到同一个索引,它们会被添加到该索引处的链表或红黑树中。

  3. 查找:当需要查找一个键时,首先计算其哈希码并找到相应的数组索引。然后遍历该位置上的链表或红黑树,使用equals()方法比较键,直到找到匹配的键为止。

  4. 调整大小(Resize):当HashMap中的元素数量超过了其容量乘以加载因子(默认为0.75)时,HashMap会自动调整其大小(通常增加为两倍),并将所有元素重新散列到新的数组中。这个过程称为“rehashing”。

http://www.lryc.cn/news/391616.html

相关文章:

  • 昇思学习打卡-6-基于MindSpore的GPT2文本摘要
  • 代码随想录算法训练营第2天|LeetCode977,209,59
  • Web前端开发——HTML快速入门
  • 浅谈http协议及常见的面试题
  • LabVIEW自动探头外观检测
  • 搏击与防卫笔记
  • 泰国内部安全行动司令部数据泄露
  • MATLAB算法实战应用案例精讲-【数模应用】分层聚类(附MATLAB、python和R语言代码实现)
  • 九、函数的声明和定义
  • 简洁纯文字类的Typecho主题wenso
  • 安卓请求服务器[根据服务器的内容来更新spinner]
  • c++ 联合(Union)的特性和使用
  • 大白菜U盘启动工具
  • C# 中 IEnumerable 和 IQueryable 接口之间的区别
  • centos安装yum命令及常用yum命令
  • table = collections.defaultdict(list)申请的字典的类型是什么?
  • 【虚拟机】虚拟机网络无法访问问题【已解决】
  • 大数据面试题之Spark(3)
  • 基于 Gunicorn + Flask + Docker 的模型高并发部署
  • CPU通过网络将IP camera的RTSP流(H.264编码或是H.265编码)拉回, 交给GPU解码并显示的处理流程
  • windows@资源管理器中的地址栏@访问共享文件夹的各种方法@管理共享文件夹
  • ffmpeg推流时Unknown encoder ‘libx264‘
  • xmind导入导出支持图片功能源码改造
  • Web应用防火墙用在哪些场景?
  • MySQL高可用(MHA高可用)
  • k8s_如何配置 containerd 使用镜像加速拉取docker.io上的镜像
  • centos7安装宝塔面板
  • Spring 事务管理:全面解析
  • 概率论与数理统计_上_科学出版社
  • 昇思25天学习打卡营第11天|LSTM+CRF序列标注