我用下面几行代码声明了一个对象节点队列:
Queue<Node> queue;
queue = new LinkedList<Node>();但是,当我声明Node对象的堆栈时,通过将队列替换为堆栈,它不起作用。为甚麽呢?另外,到底是什么
queue = new LinkedList<Node>(); 卑劣?这是否意味着正在创建Node对象的链表,并且可以在队列中?
我正在学习开放式课件,学习数据结构和算法,我是一个初学者。谢谢!
发布于 2013-02-26 12:48:30
这是因为java.util.LinkedList实现了java.util.Queue,但它不是java.util.Stack,尽管它有push和pop方法。Stack是一个遗留类,不推荐使用它,但如果您仍然想要使用它,则可以这样做
Stack<Node> stack = new Stack<Node>();发布于 2013-02-26 12:43:19
在Java语言中,由于遗留的原因,Stack是一个类,而不是一个接口。因此,不能将LinkedList赋值给Stack类型的变量。
Deque接口声明了后进先出操作(尽管它也声明了先进先出操作),而LinkedList实现了Deque。
当你这样做的时候
queue = new LinkedList<Node>();您正在创建一个LinkedList,但是通过类型Queue引用它,这样就只公开了FIFO操作。这将确保以后可以通过仅更改上面的行来替换Queue的其他实现。
发布于 2013-02-26 12:45:50
Queue<Node> queue说变量队列的类型是“节点队列”。Queue是一个接口而不是一个类。
Java的LinkedList类实现了Queue接口,所以queue = new LinkedList<Node>();完全没问题。
Java Stack是一个实际的类,它不实现Queue接口,因此您不能简单地将其替换为。
https://stackoverflow.com/questions/15081473
复制相似问题