我已經實現了一個類來模擬java中的有理數,它有兩個整數來模擬分子和分母。我需要重寫Object的哈希碼方法,所以相同的數字具有相同的哈希碼。有理數的散列碼
我定義我的equals()方法是這樣的:
public boolean equals(Object obj) {
Racional r = null;
if (obj instanceof Racional) {
r = (Racional) obj;
} else {
return false;
}
return r.getDenominador() * this.numerador == r.getNumerador() * this.denominador;
}
對此:
將返回分子分母*是一個好方法嗎?
如果等價的有理數(如1/4和2/8)返回相同的哈希碼?
你可以計算哈希碼,即使對象的值是2/8的哈希碼進行計算,以1/4 –
是這樣之前總是簡化,但不會是不必要的複雜性hashCode方法補充的嗎? –
@EugenioCuevas捕獲可能防止異常通常被認爲是不好的做法(投擲/捕獲異常是一個耗時的操作)。通常建議在轉換之前使用'if(obj instanceof Racional)'來防止'ClassCastException's。 – Jeffrey