Java中的HashCode问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 16:40:49
对 String s = "123"; s.hashCode()的疑问。

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

相等和哈希码 相等是从一般的方面来讲,哈希码更加具有技术性。如果我们在理解方面存在困难,我们可以说,他们通过只是一个实现细节来提高了性能。 大多数的数据结构通过equals方法来判断他们是否包含一个元素,例如: List list = Arrays.asList(

1.不同的字符串可能会有相同的HashCode吗?
可以!

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

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

具体可参照API的Object中的equals方法和hashCode方法

1.hashcode是用来判断两个字符串是否相等的依据,不同的字符串不可能有相同的hashcode,但不同的hashCode经过与长度的取余,就很可能产生相同的hashCode,就是所谓的哈希冲突.
2.相同的字符串的hashcode不可能不同;
3.hashcode是由简单的Hash算法得出来的,根据字符串的值算出来的,每次算出来的结果都相同

java规范:
1.两个equals的对象一定要有相同的hashcode
2.对于同一个对象每次生成的hashcode必须相同
String类是jdk里的基础类,是严格遵守规范的,而且是final的,不能继承,所以也没有重写覆盖hashcode方法的可能
所以结论是:
每个字符串的hashcode是唯一的
1.不可能
2.不可能
3.一定相同

1:可能 如:
int hash1 = "ABCDEa123abc".hashCode();
int hash2 = "ABCDFB123abc".hashCode();
System.out.println(hash1);
System.ou