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()可能也会更改.