Java中HashMap的内部工作
函数“hashCode”用于获取Java中对象的哈希码。这是超类Object的对象。它以整数形式返回对象引用的内存。这是一个本机函数,这意味着Java中没有直接方法可用于获取对象的引用。
为了使HashMap的性能更好,请hashCode()
正确使用。基本上,此函数用于计算存储区和索引值。它以以下方式定义-
public native hashCode()
既然我们提到了“存储桶”,那么了解它的含义就很重要。它是用于存储节点的元素。一个存储桶中可以有两个以上的节点。可以使用链接列表数据结构连接节点。可以使用存储桶和负载因子来计算哈希映射的容量。
Capacity = number of buckets * load factor
函数“等于”用于检查两个对象之间的相等性。它也是由超类Object给出的。通过提供定制的实现,可以在定制的类中重写此功能。该函数根据问题中的两个对象是否相等来返回true或false。
生成索引值,以便数组的大小不大,从而避免outOfMemoryException。查找数组索引的公式为-
Index = hashCode(key) & (n-1) – Here n refers to number of buckets.
让我们看一个例子-
示例
import java.util.HashMap; class hash_map{ String key; hash_map(String key){ this.key = key; } @Override public int hashCode(){ int hash = (int)key.charAt(0); System.out.println("The hash code for key : " + key + " = " + hash); return hash; } @Override public boolean equals(Object obj){ return key.equals(((hash_map)obj).key); } } public class Demo{ public static void main(String[] args){ HashMap my_map = new HashMap(); my_map.put(new hash_map("This"), 15); my_map.put(new hash_map("is"), 35); my_map.put(new hash_map("a"), 26); my_map.put(new hash_map("sample"), 45); System.out.println("The value for key 'this' is : " + my_map.get(new hash_map("This"))); System.out.println("The value for key 'is' is: " + my_map.get(new hash_map("is"))); System.out.println("The value for key 'a' is: " + my_map.get(new hash_map("a"))); System.out.println("The value for key 'sample' is: " + my_map.get(new hash_map("sample"))); } }
输出结果
The hash code for key : This = 84 The hash code for key : is = 105 The hash code for key : a = 97 The hash code for key : sample = 115 The hash code for key : This = 84 The value for key 'this' is : 15 The hash code for key : is = 105 The value for key 'is' is: 35 The hash code for key : a = 97 The value for key 'a' is: 26 The hash code for key : sample = 115 The value for key 'sample' is: 45
名为“hash_map”的类定义了字符串和构造函数。这被另一个名为“hashCode”的函数覆盖。在这里,哈希映射的键值被转换为整数,并打印出哈希码。接下来,“等于”函数被覆盖,并检查键是否等于哈希映射的键。Demo类定义一个主要函数,在该函数中创建HashMap的新实例。使用“put”功能将元素添加到此结构中并打印在控制台上。