📅  最后修改于: 2023-12-03 14:42:16.326000             🧑  作者: Mango
在 Java 中,每个对象都有一个 hashCode()
方法,它返回一个 int
类型的哈希值。哈希值是根据对象的内容生成的,因此它可以用作对象的唯一标识符。
String
类也实现了 hashCode()
方法,它返回的哈希值是根据字符串中每个字符的 Unicode 编码计算得出的。具体来说,它使用以下算法:
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
其中,h
是一个初始值为 0 的 int
类型变量,val
是字符串中的字符数组,31
是一个常数,意义是将上一轮的哈希值左移 5 位再加上当前字符的 Unicode 编码。
该算法返回的哈希值足够均匀分布,因此可以在哈希表等数据结构中使用。
示例代码如下:
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
String s3 = "hello";
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s3.hashCode());
}
输出:
99162322
113318802
99162322
可以看出,相同的字符串返回相同的哈希值,不同的字符串返回不同的哈希值。这是哈希值的基本特性,也是我们在使用哈希表等数据结构时需要注意的事项。
总之,hashCode()
方法是 Java 中重要的工具方法之一,尤其在程序员使用哈希表等数据结构时具有重要的意义。