两个java对象哈希代码如何相似
在下面的代码中,我有两个字符串对象,它们都是不同的对象,但我得到了相似的哈希代码。这是怎么可能的 公共类ObjectHashCode{两个java对象哈希代码如何相似,java,Java,在下面的代码中,我有两个字符串对象,它们都是不同的对象,但我得到了相似的哈希代码。这是怎么可能的 公共类ObjectHashCode{ public static void main(String...mj){ String str1 = new String("Aa"); String str2 = new String("BB"); System.out.println(str1.hashCode());//
public static void main(String...mj){
String str1 = new String("Aa");
String str2 = new String("BB");
System.out.println(str1.hashCode());//2112
System.out.println(str2.hashCode());//2112
}
}您应该始终阅读有关方法输入和方法输出之间基本契约的文档。在这种情况下,文件说明(省略不相关的段落): 如果两个对象不相等,不要求 根据{@link java.lang.Object#equals(java.lang.Object)} 方法,然后对每个 两个对象必须产生不同的整数结果。但是, 程序员应该知道生成不同的整数结果 对于不相等的对象,可以提高哈希表的性能 至于为什么这些值是相同的,Java的好处是您可以随时查看源代码。这是如何为
String
的实例计算hashCode
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;
}
注意:a'=65,'B'=66,'a'=97的数值您应该始终阅读有关方法输入和方法输出之间基本契约的文档。在这种情况下,文件说明(省略不相关的段落): 如果两个对象不相等,不要求 根据{@link java.lang.Object#equals(java.lang.Object)} 方法,然后对每个 两个对象必须产生不同的整数结果。但是, 程序员应该知道生成不同的整数结果 对于不相等的对象,可以提高哈希表的性能 至于为什么这些值是相同的,Java的好处是您可以随时查看源代码。这是如何为
String
的实例计算hashCode
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;
}
注意:a'=65,'B'=66,'a'=97的数值有2^32个可能的唯一哈希代码。还有更多可能的字符串。因此,不同的字符串可以有相同的哈希代码。这就是他们所谓的“哈希冲突”,这也是哈希***有bucket或一些超复杂移位逻辑的原因之一。用于哈希值冲突或哈希值模冲突。有2^32个可能的唯一哈希代码。还有更多可能的字符串。因此,不同的字符串可以有相同的哈希代码。这就是他们所谓的“哈希冲突”,这也是哈希***有bucket或一些超复杂移位逻辑的原因之一。用于哈希值冲突或哈希值模冲突。