簡體   English   中英

Java Stack鏈接列表

[英]Java Stack Linked list

我用以下代碼行聲明了一個對象節點隊列:

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

但是,當我聲明Node對象的堆棧時,通過將Queue替換為堆棧,它不起作用。 為什么會這樣呢? 還有,到底是什么

queue = new LinkedList<Node>(); 

意思? 這是否意味着正在創建Node對象的鏈接列表,並且該列表可以在Queue中?

我正在使用開放式課件來學習有關數據結構和算法的知識,並且我是一個初學者。 謝謝!

在Java中,由於遺留原因, Stack是一個類,而不是一個接口。 因此,不能將LinkedList分配給Stack類型的變量。

Deque接口聲明了LIFO操作(盡管它也聲明了FIFO操作),而LinkedList實現了Deque

當你做

queue = new LinkedList<Node>();

您正在創建一個LinkedList但通過Queue類型引用了它,以便僅公開FIFO操作。 這樣可以確保稍后通過僅更改上面的行來交換Queue其他實現。

Queue<Node> queue表示變量隊列的類型為“節點隊列”。 Queue是接口而不是類。

Java的LinkedList類實現了Queue接口,因此queue = new LinkedList<Node>(); 完全可以。

Java Stack是一個不實現Queue接口的實際類,因此您不能僅將其替換。

這是因為java.util.LinkedList實現了java.util.Queue,但盡管具有push和pop方法,但它不是java.util.Stack。 堆棧是一個遺留類,不建議使用它,但是如果您仍然想使用它,這就是方法

Stack<Node> stack = new Stack<Node>();

這是否意味着正在創建Node對象的鏈接列表,並且該列表可以在Queue中?

不,這意味着用於隊列的基礎數據結構是LinkedList,並且您可以添加Node類型的對象

如果您不熟悉此構造,則應該閱讀泛型LinkedList<Node>()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM