Java中的HashCode问题

对 String s = "123"; s.hashCode()的疑问。

1.不同的字符串可能会有相同的HashCode吗?
2.相同的字符串可能会有不同的HashCode吗?
3.相同的字符串每次生成的HashCode都相同吗?

1.hashcode是用来判断两个字符串是否相等的依据,不同的字符串不可能有相同的hashcode,但不同的hashCode经过与长度的取余,就很可能产生相同的hashCode,就是所谓的哈希冲突.
2.相同的字符串的hashcode不可能不同;
3.hashcode是由简单的Hash算法得出来的,根据字符串的值算出来的,每次算出来的结果都相同
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-03
1.不同的字符串可能会有相同的HashCode吗?
可以!

2.相同的字符串可能会有不同的HashCode吗?
如果你自己重写equals和hashcode方法是可以实现的,但是java规范要求两个equals的对象一定要有相同的hashcode

3.相同的字符串每次生成的HashCode都相同吗?
你的实现可以不同,但是java规范要求对于同一个对象每次生成的hashcode必须相同!

具体可参照API的Object中的equals方法和hashCode方法本回答被提问者采纳
第2个回答  2009-11-03
java规范:
1.两个equals的对象一定要有相同的hashcode
2.对于同一个对象每次生成的hashcode必须相同
String类是jdk里的基础类,是严格遵守规范的,而且是final的,不能继承,所以也没有重写覆盖hashcode方法的可能
所以结论是:
每个字符串的hashcode是唯一的
1.不可能
2.不可能
3.一定相同
第3个回答  2009-11-03
1:可能 如:
int hash1 = "ABCDEa123abc".hashCode();
int hash2 = "ABCDFB123abc".hashCode();
System.out.println(hash1);
System.out.println(hash2);
2:不可能
3:相同
public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;

for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
这个算发绝对不会算出两个结果的。
第4个回答  2018-07-05
相等和哈希码 相等是从一般的方面来讲,哈希码更加具有技术性。如果我们在理解方面存在困难,我们可以说,他们通过只是一个实现细节来提高了性能。 大多数的数据结构通过equals方法来判断他们是否包含一个元素,例如: List list = Arrays.asList(本回答被网友采纳