一个一般性的问题(可能以前回答过,但我没有找到)。
我更喜欢什么:哈希代码的Josh Bloch实现直接在我的类中或对方法Objects.hash(...)
的委派。
Josh Bloch变体的优点:
Objects.hash
的专业人士
是的,我知道Objects.hash
在内部使用Josh Bloch的公式。
现在我的问题是:在我的班级中直接执行Josh Bloch公式是否比向Objects.hash
进行委派要显着更快?因为Objects.hash
要求创建额外的数组以用于参数提交和基元装箱。但是我也知道,JVM为性能优化提供了很多“魔术”,因此我的假设可能不正确(例如,对基元进行缓存可以提高装箱速度)。
相同的问题是否等于:我应该使用自动生成的方法还是应该委派给Arrays.equals
一些代码,以演示如何使用委托来实现这些方法。
import java.util.Arrays;
public class MyObject {
private int field1;
private String field2;
private long field3;
// use special method to grant that the both equals and hashCode
// are changed when a field is added or removed.
private Object[] data() {
return new Object[] {field1, field2, field3};
}
@Override
public boolean equals(Object obj) {
if (obj instanceof MyObject) {
return Arrays.equals(data(), ((MyObject) obj).data());
}
return false;
}
@Override
public int hashCode() {
return Arrays.hashCode(data());
}
}