這個問題是跟隨Implementing hashCode for a BST。我的問題糟透了,所以我得到了一個我不確定如何使用的答案。實現BST的equals和hashcode
我需要實現equals
爲BST:讓當且僅當 2個BSTS在結構和內容相等,則equals
返回true。因此,我想我也需要實現hashCode
函數。我得到了hashCode函數的答案,使得樹在結構和內容上是相同的。
@Override
puclic int hashCode(){
int h = Objects.hashCode(data);//data is int
int child=0;
if(null != left)
child =left.hashCode();
if(null != right)
child+= right.hashCode();
if(0<child) h= h*31+child;
return h;
}
但是我該如何實現equals函數呢?請問以下工作iff樹的結構和內容是否相同?
@Override
public boolean equals(Node otherRoot){
return root.hashCode() == otherRoot.hashCode();
}
可能會出現我可以誤報的情況嗎?
還是應該我的hashCode是
@Override
public int hashCode(){
int h = contents.hashCode();
h = h * 31 + Objects.hashCode(leftChild);
h = h * 31 + Objects.hashCode(rightChild);
return h;
}
,並在後一種情況下,將我的equals
避免誤報?
兩個哈希碼是相同的,並不意味着兩個對象相等。規則應該是「兩個被認爲相等的對象應該具有相同的哈希碼」。乘以31不會有任何用處;您可能會爲足夠大的樹或足夠大的int值導致算術溢出。 –
非常感謝大家。 +1提供所有幫助。 –