通用编程,通用数据结构

时间:2013-12-10 06:47:14

标签: java data-structures generic-programming

我正在尝试实现二进制搜索树,如果我在java中使用泛型编程,那么这棵树应该能够存储任何类型的数据,例如int,Strings或基本上任何其他对象。但是这种类的问题在于对例如函数进行编码。如果我正在编写addToTree函数,那么“<”运算符可用于比较int,它会成功地将int插入树中,但它不会插入字符串或其他对象,因为使用“<”比较字符串和其他对象可能不允许经营者。

此问题对其他数据结构也是如此。

3 个答案:

答案 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方法一致。实现equalscompareTo方法听起来比实际上更容易。这应该是精心设计的。

通常情况下,类的对象没有真正的自然顺序。但是,您将拥有在特定房产上订购它们的任务。对于此类任务,您可以实现另一个界面:Comparator。然后可以使用比较器根据需要对对象进行排序。

看看TreeSet,这是一个搜索树。这个Set实现提供了两个构造函数:一个用于与可比较的对象一起使用。另一个为该任务采用比较器,旨在与不可比较的对象一起使用。