Java Stack链接列表

时间:2013-02-26 04:41:28

标签: java stack queue

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

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

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

queue = new LinkedList<Node>(); 

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

我正在学习有关数据结构和算法的开放课件,我是初学者。谢谢!

4 个答案:

答案 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>()

,则应阅读泛型