首页 > 其他分享 >理解HashMap底层数据结构

理解HashMap底层数据结构

时间:2023-01-06 13:31:35浏览次数:58  
标签:HashMap 数组 链表 地址 冲突 哈希 数据结构 底层


文章目录

  • ​​`hash`​​
  • ​​常用解决哈希冲突方法​​
  • ​​链地址法​​
  • ​​开放地址法​​
  • ​​`array`​​
  • ​​链表​​
  • ​​红黑树​​
  • ​​`HashMap`​​
  • ​​参考文章​​

在​​JDK8​​中HashMap是基于数组+链表+红黑树的实现。

​hash​

​hash​​哈希,也称为散列。基本原理是把任意长度的输入通过一定的映射规则转换为固定长度的输出。映射规则就是对应的哈希算法。由于输出空间值小于输入空间值,根据“抽屉原理”一定会存在不同的输入转换为相同的输出的情况。作为一个好的哈希算法需要做到让这种冲突发生的几率尽可能小。

理解HashMap底层数据结构_数组

常用解决哈希冲突方法

链地址法

链表地址法是使用一个链表数组,来存储相应数据,当hash遇到冲突的时候依次添加到链表的后面进行处理。

开放地址法

开放地址法是指大小为 M 的数组保存 N 个键值对,其中 M > N。我们需要依靠数组中的空位解决碰撞冲突。基于这种策略的所有方法被统称为“开放地址”哈希表。线性探测法,就是比较常用的一种“开放地址”哈希表的一种实现方式。线性探测法的核心思想是当冲突发生时,顺序查看表中下一单元,直到找出一个空单元或查遍全表。简单来说就是:一旦发生冲突,就去寻找下 一个空的散列表地址,只要散列表足够大,空的散列地址总能找到。

​array​

​array​​数组, 是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数。利用下标操作元素。查找效率高,插入、删除效率低(需要挪位等)

链表

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。插入、删除效率高,查找效率低。

红黑树

红黑树是一种含有红黑结点并能自平衡的二叉查找树

​HashMap​

理解HashMap底层数据结构_链表_02

我们都知道​​HashMap​​​是以​​key​​​、​​value​​​的形式存储,存储时在内存中初始化一个长度为16的数组,根据一定的哈希算法得到哈希值。这个哈希值作为数组的下标。当哈希值冲突时数组中的元素将转为链表,同一个链表的元素哈希值一致。当链表长度达到8时,​​JDK8​​会把当前链表转为红黑树来提升效率。

参考文章

​https://www.zhihu.com/question/26762707/answer/890181997​​​​https://zhuanlan.zhihu.com/p/28501879​​​​https://zhuanlan.zhihu.com/p/28587782​


标签:HashMap,数组,链表,地址,冲突,哈希,数据结构,底层
From: https://blog.51cto.com/u_15932195/5993038

相关文章

  • 『中级篇』docker架构和底层技术(12)
    ​前11节主要是介绍docker的安装,如果跟这我来学我相信大家已经有了一个docker的安装环境,本次是看下docker的架构和底层的技术,其实随着各位老铁的学习我相信对于docker架......
  • QFramework v1.0 使用指南 工具篇:15. 补充内容:GridKit 二维格子数据结构
    在做游戏的过程中,我们经常需要处理二维格子类的数据,比如消除类游戏、俄罗斯方块、各种棋类游戏,还有我们最常用的Tilemap的地块数据,这些都需要二维格子数据结构。而在Ga......
  • 数据结构:ST表 学习笔记
    ST表RMQ问题RMQ是英文RangeMaximum/MinimumQuery的缩写,表示区间最大(最小)值。ST表是用于解决离线RMQ问题的一种线性数据结构,在全国青少年信息学奥林匹克系列竞......
  • 230105_05_RPC底层原理
    返回值一定是一个对象,当前是把user拆分成1个id,1个name返回,当user变了,比如增加了属性,则需要再次修改相应代码,因此需要进一步优化直接将这个对象返回,不进行拆分Stub:返回......
  • dataframe数据结构之数据的筛选
    导入模块importpandasaspd案例数据my_dict={'姓名':['张三','李四','王二','六月','北海'],'年龄':[23,27,26,22,18],'性别':['男......
  • 数据结构
    数据结构:操作对象和操作对象之间的关系1、操作对象为数值对象例:长方形S=ab面积计算公式操作对象:S\a\b对象关系:S=ab特点:数据元素的关系简单,计算复杂,因......
  • 阅读《底层逻辑》
    作者:刘润 阅读时间:2023.01所写内容仅代表本人所感所想。如若指正,欢迎留言讨论。概率思维,值得推荐,要顺应时代。时代:排在“千位”时代所带来的概率优势是极其巨大,它能帮助......
  • 1、app自动化的底层逻辑,adb及monkey
    app自动化的过程中,底层逻辑是计算机通过adb与移动设备进行沟通,告诉移动设备,进行什么操作;一、概念:Andriod调试桥(adb),是一种命令行工具,可以让我们与设备进行通讯。二、adb......
  • 数据结构和算法
    栈和队列的定义和特点栈和队列是两种常用的、重要的数据结构栈和队列是限定插入和删除只能在表的“端点”进行的线性表(栈和队列是线性表的子集)栈的应用栈的操作具有......
  • 230104_50_RPC底层原理
    上述Stud中,有一个参数,writeInt(123),传的都是123这个具体的值,如果接口中暴露了其他的方法,其他方法需要出入的参数不同,就需要对此进行进一步优化。要实现,无论有多少个方法,都用......