在一般的java数据结构中扩展一个类和可比较的类

时间:2011-06-02 16:33:10

标签: java tree extends comparable

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

由于   - 史蒂夫

4 个答案:

答案 0 :(得分:3)

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

希望这有帮助。

以下示例: -

public final class AVL implements Comparable<SomeObject> extends BinaryTree

答案 1 :(得分:2)

您可以使用Generics指定类型并要求它实现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>()

答案 2 :(得分: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
}

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

答案 3 :(得分:0)

您通常希望比较树中的密钥,而不是一棵树与另一棵树或密钥。

因此,您的密钥对象应该实现Comparable,或者更好Comparable<K>,其中K是您的密钥的某种超类型。

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

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

   ...

}

我真的不明白你的BinaryTree课程的关系,抱歉。