Java 比较一个节点类型字符串与另一个节点类型字符串的二叉搜索树

Java 比较一个节点类型字符串与另一个节点类型字符串的二叉搜索树,java,nodes,Java,Nodes,我正在研究二叉搜索树数据结构,在比较两个字符串节点时遇到了一个问题。这是我的代码,在下面的第18行,我想比较根节点和另一个字符串节点 nodeToAdd.word < node.word //this is how i want to compare the nodes 您可以让类节点实现,这样您就必须重写按字母顺序比较字符串的方法 您可以通过执行以下操作将比较委托给节点持有的单词:返回this.word.compareTo(其他.word)要比较两个节点,请定义一个比较器: Compa

我正在研究二叉搜索树数据结构,在比较两个字符串节点时遇到了一个问题。这是我的代码,在下面的第18行,我想比较根节点和另一个字符串节点

nodeToAdd.word < node.word //this is how i want to compare the nodes

您可以让类
节点
实现,这样您就必须重写按字母顺序比较字符串的方法


您可以通过执行以下操作将比较委托给节点持有的单词:
返回this.word.compareTo(其他.word)
要比较两个节点,请定义一个
比较器

Comparator<Node> nodeComparer = Comparator.comparing(node -> node.word);
不要在一个类上实现
compariable
,除非该类有一个在大多数情况下都合理的自然排序(排序、查找最小值、最大值等)。我不认为这对节点是正确的。我可以想象想要在树中按深度排序,或按decent数排序,或查找具有最长字符串的节点或其他条件。最好使用适合您需要的自定义
比较器

还要注意,如果您实现了
Comparable
,您可能还应该定义
equals
hashCode
,因为强烈建议自然顺序与equals一致(请参阅)


有关自然排序以及何时使用它的详细信息,请参阅的答案。

还有其他方法吗,或者这是最佳的代码实践吗?@TIMMAY6969这是面向对象的方法:要能够比较节点,请让类实现。@TIMMAY6969这是标准方法,它使节点类可以通过集合框架进行排序。然而,您可以在节点上定义一个
greaterThan()
方法来捕获这个概念,但我不会。
Comparator<Node> nodeComparer = Comparator.comparing(node -> node.word);
nodeCompare.compare(node1, node2);