每Java文档中,哈希代码的String对象被计算为:
Run Code Online (Sandbox Code Playgroud)s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]使用
int算术,其中s[i]是 字符串的第i个字符,是字符串n的长度,并^指示取幂.
为什么31用作乘数?
我知道乘数应该是一个相对较大的素数.那么为什么不是29岁,37岁,甚至97岁?
假设我有一个包含许多实例变量的类.我想重载==运算符(和hashCode),以便我可以将实例用作映射中的键.
class Foo {
int a;
int b;
SomeClass c;
SomeOtherClass d;
// etc.
bool operator==(Foo other) {
// Long calculation involving a, b, c, d etc.
}
}
Run Code Online (Sandbox Code Playgroud)
比较计算可能很昂贵,所以我想检查是否other与this进行计算前的实例相同.
如何调用Object类提供的==运算符来执行此操作?