当前位置: 首页 > 网络应用技术

轻松理解在3分钟内在单个线程中工作的hashmap原理

时间:2023-03-08 00:37:30 网络应用技术

  Hashmap主要用于处理钥匙值。通过JDK版本的更新,JDK1.8还优化了HashMap.today的底层。TODAY我将带您组合源代码以解释hashmap.l的原理。

  Hashmap基于与哈希表的MAP接口的实现。它的特征是访问数据的快速速度,而不是顺序遍历。HashMap提供了所有可选的映射操作,但不能保证映射顺序不变,并且允许使用空置和空键。安全的。当同时编写多个线程时,数据可能不一致。

  1. Hashmap中的关键属性必须彻底理解哈希图的原理。首先,您需要对以下关键属性有基本的了解。

  我们看到Hashmap的源代码:

  第一个属性负载因子是负载因子,为0.75,是指在扩展之前。

  第二个属性阈值是键值对的临界值对,可以通过hashmap来容纳。其计算规则是负载因子乘以数组长度。

  第三个属性大小,用于记录哈希图中的键值对。

  第四个属性modCount,用于记录哈希图内部结构的变化数。

  第五是恒定属性default_initial_capacity,它指定16的默认容量。

  2.哈希图的存储结构

  hashmap使用存储结构。哈希图的数组部分称为哈希桶,并且数组元素存储在称为表的属性中。链接列表的长度大于等于8时,链接列表将存储数据。以红色和黑树的形式。当长度降至6时,它将被转换为链接的表单以存储它。

  每个节点节点都保留在用于定位额定索引数量的索引的位置的哈希值,键,值和链接列表中。节点类是HashMap的内部类,它实现了MAP.ENTRY接口。它的本质实际上可以简单地理解成就是一个关键值对,请查看源代码。

  3. hashmap的工作原理当我们在hashmap中插入数据时,我们必须首先确定节点在数组中的位置。因此,如何确定节点的存储位置?以字符串“ e”对象为示例:

  hashmap首先调用HashCode()方法以获取键的hashCode值以进行H。然后执行H值的高级操作;将H 16位移至右侧,以获得16位H的高度,与操作不同或操作,最后获得H(Table.length-1)的值最终计算出竞标。当然,这是最官方的描述。可能会感到困惑。实际上,此操作过程被简单地理解为找到道路的一种方式。

  它是使用散列值和阵列的长度减少1,取模并最终获得阵列的竞标。这可以确保阵列不会竞标。但是,该位置是具有较高效率的二进制操作。

  最后,查看动画演示,假设“ A”,“ B”,“ D”,“ R”,“ T”,“ E”的键。通过计算,投标为1,2,4,2,4和5分别

  它们的插入顺序如动画所示。

  如果我们插入“ a”,“ g”,“ i”,则四个键,请查看哈希图的内部更改。

  当插入A作为密钥的第二个对象时,将新值分配给A的值A。当插入对象的大小超过临界值时,HashMap将创建一个新的存储桶数组并重新启动值(当然,当然,重新分配JDK1.7和1.8的方法略有不同)

  目前,哈希图密钥的输出顺序为null,a,b,r,d,t,e,g,i

  Hashmap的工作原理,您了解吗?

  有必要单独模拟访谈,需要做职业计划的学生是我[666]或[汤姆]和100,000+文字测试文件免费汇编给PDF!我是文学和艺术的汤姆,

  原始:https://juejin.cn/post/709525464792534221