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