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