如何在hashCode()
方法中使用Objects#hash(Object...)
?使用Objects#hash(Object ...)用於hashCode方法?
int a = 1;
boolean b = true;
Date c = new Date();
String d = "1234";
Object e = new ch.example.blabla.Foo();
// Java 7
public int hashCode() {
return Objects.hash(a, b, c, d, e);
}
// or using Java 6
public int hashCode() {
return Arrays.hashCode(new Object[] {a, b, c, d, e});
}
在正常情況下,例如具有
equals(Object)
方法太等
當然。 Joshua Bloch在他的書中寫道,如何使用他的規則/配方(如移位等)編寫好的方法。
上面的例子並沒有遵循這些原則數據類型的規則......所以我的問題是,處理像對象(autoboxing)原始數據類型而不是遵循Bloch的配方或使用Apache Commons HashCodeBuilder
?
Objects#hash(Object...)
是在Java 7中引入的,只調用Arrays.hashCode(Object[])
,所以這個問題也是針對Java 6用戶的。
謝謝你的回覆/意見/建議!
我認爲這確實遵循原始類型的規則(自動包裝的包裝器以相同的方式散列),但其缺點可能是由於所有垃圾產生的性能。 –
如果現代jvm能夠優化所有的拳擊和陣列創建,我不會感到驚訝。 –