Zhi*_*ANG 2 java hash dictionary hashmap
class A{
int a;
A(){
this.a = 100;
}
}
//in main, we have:
A a = new A(), b = new A();
//and
String str0 = "123", str1 = "123";
Run Code Online (Sandbox Code Playgroud)
为什么str0和str1的哈希码是相同的,但不是a和b?
因为你的班级没有String
覆盖 Object.hashCode()
.
这意味着String
该类具有特定的实现hashCode()
,将根据该String
值计算散列.因此,对于具有相同值的两个字符串,哈希码将是相同的.
A
例如,当您创建新类时,如果您不提供自己的实现,hashCode()
则将使用类中的默认实现Object
.默认实现只能保证如果哈希代码来自完全相同的实例,则它们将是相同的.
方法Objects.hash()
(对于多个值)和Objects.hashCode()
(对于单个值)使得hashCode()
在您自己的类中实现更容易.例如:
class A{
int a;
A() {
this.a = 100;
}
@Override
public int hashCode() {
return Objects.hashCode(a);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果用于创建哈希值的属性值在某个时刻发生更改,则结果hashCode()
可能也会更改.
归档时间: |
|
查看次数: |
83 次 |
最近记录: |