0

宿題のために、私はAVLツリーデータ構造を作成するように割り当てられました。「add」メソッドを作成して、一般的なデータをツリーに追加しようとしています。私の問題は、割り当てで「BinaryTree」と呼ばれるクラスを拡張する必要があることです。addメソッド内で、compareToメソッドを使用する必要があります。これは、Comparableも拡張する必要があることを意味すると思います。私はオンラインで調べましたが、どうやら2つのクラスを拡張できないため、これが問題になります。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

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>()

于 2011-06-02T16:47:13.880 に答える
0

まず第一にjava.lang.Comparable、クラスではなくインターフェースです。Javaでは1つのクラスしか拡張できませんが、必要な数のインターフェースを実装できるため、次のようなことを行うのは完全に有効です。

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 に答える