Java教程

Java中HashMap工作原理


什么是散列

这是将对象转换为整数值的过程。整数值有助于索引编制和更快的搜索。

什么是HashMap

HashMap是Java集合框架的一部分。它使用一种称为哈希的技术。它实现了map接口。它将数据存储在"键和值"对中。 HashMap包含节点的数组,并且该节点表示为一个类。它在内部使用数组和LinkedList数据结构存储键和值。 HashMap中有四个字段。
在Java中使用HashMap的工作
在理解之前在HashMap的内部工作中,您必须了解hashCode()和equals()方法。
equals(): 它检查两个对象的相等性。它比较密钥,无论它们是否相等。它是Object类的方法。它可以被覆盖。如果覆盖equals()方法,则必须覆盖hashCode()方法。 hashCode(): : 这是对象类的方法。它以整数形式返回对象的内存引用。从该方法收到的值用作存储桶编号。值区编号是Map内元素的地址。空键的哈希码为0。 存储桶: 节点的数组称为存储桶。每个节点都有一个像LinkedList这样的数据结构。多个节点可以共享同一存储桶。容量可能会有所不同。 在Java中使用HashMap

插入键,值HashMap中的配对

我们使用put()方法在HashMap中插入键和值对。 HashMap的默认大小为16(0到15)。

示例

在下面的示例中,我们要在HashMap中插入三个(键,值)对。
HashMap<String, Integer> map = new HashMap<>();
map.put("Aman", 19);
map.put("Sunny", 29);
map.put("Ritesh", 39);
让我们看看关键字,值对将在哪个索引处保存到HashMap中。当我们调用put()方法时,它将计算键" Aman"的哈希码。假设" Aman"的哈希码为2657860。要将密钥存储在内存中,我们必须计算索引。

计算索引

索引可将大小最小化的数组。索引的计算公式为:
Index = hashcode(Key) &(n-1)
其中n是数组的大小。因此," Aman"的索引值为:
Index = 2657860 &(16-1) = 4
值4是键和值将存储在HashMap中的计算索引值。
在Java中使用HashMap">

哈希冲突

当两个或多个Key的计算索引值相同时,就是这种情况。让我们计算另一个键" Sunny"的哈希码。假设" Sunny"的哈希码为63281940。要将Key存储在内存中,我们必须使用索引公式来计算索引。
Index=63281940 &(16-1) = 4
值4是计算得出的索引值,该密钥将存储在HashMap中。在这种情况下,equals()方法检查两个Key是否相等。如果键相同,则用当前值替换该值。否则,请通过LinkedList将此节点对象连接到现有节点对象。因此,这两个键都将存储在索引4处。
在Java中使用HashMap的工作
同样,我们将存储密钥" Ritesh"。假设该密钥的哈希码为2349873。索引值将为1。因此,此密钥将存储在索引1中。
在Java中使用HashMap"> HashMap中的

get()方法

get()方法用于通过其键获取值。如果您不知道密钥,它将不会获取值。调用get(K Key)方法时,它将计算Key的哈希码。
假设我们必须获取Key" Aman"。将调用以下方法。
map.get(new Key("Aman"));
它生成的哈希码为2657860。现在,使用索引公式来计算2657860的索引值。如我们上面计算的,索引值为4。 get()方法搜索索引值4。它将第一个元素Key与给定的Key相比较。如果两个键相等,则返回值,否则检查节点中的下一个元素是否存在。在我们的场景中,将其作为节点的第一个元素并返回值19。
让我们获取另一个键" Sunny"。
键" Sunny"的哈希码"是63281940。计算出的索引值63281940是4,正如我们为put()方法计算的那样。转到数组的索引4,然后将第一个元素的Key与给定的Key相比较。它还比较键。在我们的场景中,给定的Key是第二个元素,节点的下一个为null。它将第二个元素Key与指定的Key进行比较,并返回值29。如果下一个节点为null,则返回null。

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4