我已经使用以下代码行声明了一个对象队列节点:
Queue<Node> queue;
queue = new LinkedList<Node>();
但是,当我声明一个 Node 对象的堆栈时,通过将 Queue 替换为堆栈,它不起作用。为什么会这样?另外,具体是做什么的
queue = new LinkedList<Node>();
意思是?这是否意味着正在创建节点对象的链接列表并且可以在队列中?
我正在使用开放课件来学习数据结构和算法,而且我是初学者。谢谢!
在 Java 中,出于遗留原因,Stack
是一个类,而不是一个接口。因此 aLinkedList
不能分配给类型为 的变量Stack
。
该Deque
接口声明了 LIFO 操作(尽管它也声明了 FIFO 操作),并LinkedList
实现了Deque
.
当你这样做
queue = new LinkedList<Node>();
您正在创建 aLinkedList
但正在通过 type 引用它Queue
,这样只有 FIFO 操作被公开。这将确保以后,Queue
可以通过仅更改上面的行来交换其他实现。
Queue<Node> queue
表示变量队列的类型为“节点队列”。 Queue
是一个接口而不是一个类。
Java 的 LinkedList 类实现了 Queue 接口,所以queue = new LinkedList<Node>();
完全没问题。
Java Stack 是一个没有实现 Queue 接口的实际类,因此您不能直接将其替换。
这是因为 java.util.LinkedList 实现了 java.util.Queue 但它不是 java.util.Stack 虽然它有 push 和 pop 方法。Stack 是一个遗留类,不推荐使用它,但如果你仍然想使用它,这是要走的路
Stack<Node> stack = new Stack<Node>();
这是否意味着正在创建节点对象的链接列表并且可以在队列中?
不,这意味着用于队列的底层数据结构是 LinkedList,并且您可以添加类型的对象Node
如果你不熟悉这个结构,你应该阅读泛型LinkedList<Node>()