这个问题是对实现BST的hashCode的跟进。我的问题思考不够充分,所以我得到了一个答案,但我不确定如何使用它。
我需要为BST实现
但是我该如何实现equals函数呢?如果树的结构和内容相等,以下代码是否有效?请注意,"iff" 是 "if and only if" 的缩写。
在后一种情况下,我的
我需要为BST实现
equals
:当且仅当两个BST在结构和内容上相等时,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" 是 "if and only if" 的缩写。
@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
方法能避免误判吗?