0

Java でリンク リスト クラスをすばやく作成しました。リンクされたリストを使用する別のキュー クラスを作成したいと考えています。Javaでこれをどのように達成しますか? implements / extends キーワードを完全には理解していません... これが私のキューの外観です (例):

public class Queue<T> implements LinkedList
{
    protected LinkedList<T> list;

    public Queue() {
        list = new LinkedList<T>();
    }

    public void add( T element) {
        list.add( element);
    }

    public T removeLast() {
        return list.removeLast();
    }   
}

また、リンク リスト クラスもジェネリックであることに注意してください。この機能を実現するためのクラスが既に組み込まれていることは知っていますが、学びたいと思っていました (そのため、これを手動で実行しようとしています)。

編集:さらに、最後に、次のようなことを言いたいと思います:

Queue<String> aQueue = new LinkedList<String>();
4

3 に答える 3

6

そのような動作が必要な場合は、クラス/インターフェースを拡張/実装する必要がありQueue<String> aQueue = new LinkedList<String>();ます。スーパークラスは、サブクラスのオブジェクト参照インスタンスになることができますが、その逆ではないことに注意してください。LinkedListQueue

public class LinkedList<T> implements Queue<T> {

    class Node<T> {
        T data;
        Node<T> next;
    }

    //all your behavior here
}

また、Java のドキュメントに記載されているように、Queueはインターフェイスであり、LinkedListそれを実装しています。

注: LinkedList を使用してキューを実装する場合は、@Tudor によって投稿されたコード サンプルを参照してください。

于 2012-05-06T14:04:07.367 に答える
2

コードの2つの間違い:

  1. あなたは、クラス内にあることによって、実装LinkedList(拡張することを意味しましたか?)と構成の使用の両方を行っています。LinkedList

  2. このコードは機能しません。Queue<String> aQueue = new LinkedList<String>();ポイント1によるとQueue、のサブクラスであるか、LinkedListが含まれているためLinkedList、コードが正しくありません。

実際、最後のコードスニペットはほとんど意味がありません。あなたがやりたいのQueueは、リンクリストを内部的に使用するを作成することだと思います。その場合は、次を使用してください。

public class Queue<T>
{
    protected LinkedList<T> list;

    public Queue() {
        list = new LinkedList<T>();
    }

    public void add( T element) {
        list.add( element);
    }

    public T removeLast() {
        return list.removeLast();
    }   
}

その後:

Queue<String> queue = new Queue<String>();
于 2012-05-06T13:59:01.403 に答える