Java 为BST实现哈希代码
在Java中,要比较两个相等的反对意见,必须同时实现Java 为BST实现哈希代码,java,binary-search-tree,equals,Java,Binary Search Tree,Equals,在Java中,要比较两个相等的反对意见,必须同时实现equals方法和hashCode方法。我需要比较两个BST是否相等。在这种情况下,如何实现hashCode方法?现在,在节点类上实现hashCode非常简单:假设我的数据是int。但是我不能仅仅添加节点的值来检查树是否相等。那我该怎么做呢?有人成功地做到了吗 我在想我能做的很多不同的事情,但我不确定它们的可伸缩性。例如,我可以使用级别顺序,并为每个级别乘以一个大素数,但我不能确定这是否可行。所以也许有人能更好地理解我。谢谢 我不能仅仅添加节点
equals
方法和hashCode
方法。我需要比较两个BST是否相等。在这种情况下,如何实现hashCode
方法?现在,在节点
类上实现hashCode
非常简单:假设我的数据是int
。但是我不能仅仅添加节点的值来检查树是否相等。那我该怎么做呢?有人成功地做到了吗
我在想我能做的很多不同的事情,但我不确定它们的可伸缩性。例如,我可以使用级别顺序,并为每个级别乘以一个大素数,但我不能确定这是否可行。所以也许有人能更好地理解我。谢谢
我不能仅仅添加节点的值来检查树是否相等
当然可以hashCode
s不必是唯一的,如果两个BST具有相同的内容,那么在每种情况下对节点内容求和将得到相同的结果,这符合hashCode
契约。请记住--返回0
始终是hashCode()
的有效实现;不需要唯一性
(事实上,对节点内容的hashCode求和就是如何实现TreeSet.hashCode()
)
另一方面,如果您关心结构,您可以做一些简单的事情,比如用
int h = contents.hashCode();
h = h * 31 + Objects.hashCode(leftChild);
h = h * 31 + Objects.hashCode(rightChild);
return h;
…这也会得到一个关于哈希函数的不错的结构。你需要检查树的结构是否相同,或者只是内容吗?@LouisWasserman,我从来没有想过这一点。谢谢我猜两者都有。是的,结构和内容都是。我越想它,就越意识到结构对我来说意义重大。但是谢谢你的
TreeSet.hashCode()
:+1。为这种情况添加了一个实现。在这种情况下,我如何实现equals方法?与其他任何对象的实现方式相同?检查内容是否相等,检查左侧子项是否相等,检查右侧子项是否相等。