我正在尝试实现二进制搜索树,如果我在java中使用泛型编程,那么这棵树应该能够存储任何类型的数据,例如int,Strings或基本上任何其他对象。但是这种类的问题在于对例如函数进行编码。如果我正在编写addToTree函数,那么“<”运算符可用于比较int,它会成功地将int插入树中,但它不会插入字符串或其他对象,因为使用“<”比较字符串和其他对象可能不允许经营者。
此问题对其他数据结构也是如此。
答案 0 :(得分:2)
您应该限制BinarySearchTree的泛型类型,
class BinarySearchTree<T extends Comparable<? super T>>
元素应该实现Comparable接口,否则你无法对元素进行排序。
编辑:正如@JB Nizet建议的那样,不要使用原始的Comparable
答案 1 :(得分:0)
我想我得到你所说的。通常,设计良好的类(可能是您将在JDK中使用的所有标准类)实现Comparable
并覆盖内置的compareTo
方法,该方法定义&lt;,&gt;和==运营工作。 compareTo如果更大则返回1,如果相等则返回0,如果更小则返回-1。
如果你想创建自己的类来放入二叉树,那么是的,你必须实现Comparable
。
编辑:我下面的答案提出了非常重点:如果您打算使用比较,则应将可能的类类型限制为扩展Comparable
的类型!
答案 2 :(得分:0)
完成其他答案:
实现Comparable
接口只对真正具有自然排序的类有意义。此外,此排序应与equals
方法一致。实现equals
和compareTo
方法听起来比实际上更容易。这应该是精心设计的。
通常情况下,类的对象没有真正的自然顺序。但是,您将拥有在特定房产上订购它们的任务。对于此类任务,您可以实现另一个界面:Comparator
。然后可以使用比较器根据需要对对象进行排序。
看看TreeSet
,这是一个搜索树。这个Set
实现提供了两个构造函数:一个用于与可比较的对象一起使用。另一个为该任务采用比较器,旨在与不可比较的对象一起使用。