0

对于家庭作业,我被分配制作一个 AVL 树数据结构。我正在尝试使我的“添加”方法将一条通用数据添加到树中。我的问题是,在作业中,我们必须扩展一个给我们的名为“BinaryTree”的类。在我的 add 方法中,我需要使用 compareTo 方法,我相信这意味着我还必须扩展 Comparable。我在网上看过,显然你不能扩展两个类,所以这成了一个问题。我决定尝试在我的 AVL 树类中编写自己的 compareTo 方法,但它说 < 和 > 不能应用于我的泛型类型。任何提示或快速解决方法?还是我只是愚蠢?

谢谢 - 史蒂夫

4

4 回答 4

3

Java 不支持多重继承。但是,您不需要扩展Comparable,您需要实现Comparable。Comparable是一个接口。您不扩展接口,而是实现它。

希望这可以帮助。

下面的一个例子: -

public final class AVL implements Comparable<SomeObject> extends BinaryTree

于 2011-06-02T16:36:56.610 回答
2

您可以使用泛型来指定类型并要求它实现 Comparable。这样您就可以访问 AVL 树中的 type 和 compareTo()。

public class AVL<T extends Comparable<T>> extends BinaryTree {

    public void add(T object) {
            ...
        object.compareTo(some other object)
            ...
    }
}

然后您将其创建为AVL<MyObject> avl = new AVL<MyObject>()

于 2011-06-02T16:47:13.880 回答
0

首先,java.lang.Comparable是一个接口,而不是一个类。Java 只允许你扩展一个类,但你可以实现任意数量的接口,所以做这样的事情是完全有效的:

public class MyTreeImpl extends BinaryTree implements Comparable<MyTreeImpl> {

    @Override
    public int compareTo(MyTreeImpl o) {
        // your compare implementation
    }

    // the rest of your class definition
}

为了解决您的泛型问题,我想我需要查看您的代码以及编译器给您的确切错误。

于 2011-06-02T16:37:42.413 回答
0

您通常希望将树中的键相互比较,而不是一棵树与另一棵树或一个键进行比较。

因此,您的键对象应该实现Comparable,或者更好的是,您的键的某些超类型Comparable<K>在哪里。K

这通常意味着您将 AVLTree 类声明为通用类:

class AVLTree<K extends Comparable<? super K>, V> extends BinaryTree {

   ...

}

抱歉,我不太了解与您的 BinaryTree 类的关系。

于 2011-06-02T16:45:37.113 回答