1

我已经使用以下代码行声明了一个对象队列节点:

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

但是,当我声明一个 Node 对象的堆栈时,通过将 Queue 替换为堆栈,它不起作用。为什么会这样?另外,具体是做什么的

queue = new LinkedList<Node>(); 

意思是?这是否意味着正在创建节点对象的链接列表并且可以在队列中?

我正在使用开放课件来学习数据结构和算法,而且我是初学者。谢谢!

4

4 回答 4

4

在 Java 中,出于遗留原因,Stack是一个类,而不是一个接口。因此 aLinkedList不能分配给类型为 的变量Stack

Deque接口声明了 LIFO 操作(尽管它也声明了 FIFO 操作),并LinkedList实现了Deque.

当你这样做

queue = new LinkedList<Node>();

您正在创建 aLinkedList但正在通过 type 引用它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 但它不是 java.util.Stack 虽然它有 push 和 pop 方法。Stack 是一个遗留类,不推荐使用它,但如果你仍然想使用它,这是要走的路

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

这是否意味着正在创建节点对象的链接列表并且可以在队列中?

不,这意味着用于队列的底层数据结构是 LinkedList,并且您可以添加类型的对象Node

如果你不熟悉这个结构,你应该阅读泛型LinkedList<Node>()

于 2013-02-26T04:45:41.797 回答