1

次のコード行を使用して、オブジェクトのキューノードを宣言しました。

Queue<Node> queue;
queue = new LinkedList<Node>();

ただし、ノードオブジェクトのスタックを宣言するときに、キューをスタックに置き換えると、機能しません。なんでそうなの?また、正確には何をしますか

queue = new LinkedList<Node>(); 

平均?ノードオブジェクトのリンクリストが作成されており、キューに入れることができるということですか?

私はデータ構造とアルゴリズムについて学ぶためにオープンコースウェアを受講しており、初心者です。ありがとう!

4

4 に答える 4

4

Javaでは、レガシーの理由から、Stackこれはクラスであり、インターフェースではありません。したがって、LinkedListタイプの変数にaを割り当てることはできませんStack

インターフェイスはDequeLIFO操作を宣言し(ただし、FIFO操作も宣言します)、をLinkedList実装しDequeます。

あなたがするとき

queue = new LinkedList<Node>();

を作成してLinkedListいますが、タイプを介して参照しているためQueue、FIFO操作のみが公開されます。これにより、後で、Queue上記の行のみを変更することで、他の実装を入れ替えることができます。

于 2013-02-26T04:43:19.303 に答える
2

Queue<Node> queue可変キューは「ノードのキュー」タイプであると言います。 Queueクラスではなくインターフェースです。

JavaのLinkedListクラスはQueueインターフェースを実装しているので、まったく問題ありませんqueue = new LinkedList<Node>();

Java Stackは、Queueインターフェースを実装していない実際のクラスであるため、で置き換えることはできません。

于 2013-02-26T04:45:49.877 に答える
2

これは、java.util.LinkedListがjava.util.Queueを実装しているが、pushメソッドとpopメソッドはあるもののjava.util.Stackではないためです。Stackはレガシークラスであり、その使用法は推奨されていませんが、それでも使用したい場合は、これが最適な方法です。

Stack<Node> stack = new Stack<Node>();
于 2013-02-26T04:48:29.597 に答える
1

ノードオブジェクトのリンクリストが作成されており、キューに入れることができるということですか?

いいえ、キューに使用される基になるデータ構造がLinkedListであり、タイプのオブジェクトを追加できることを意味しますNode

この構成に精通していない場合は、ジェネリックスを読む必要がありますLinkedList<Node>()

于 2013-02-26T04:45:41.797 に答える