首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java堆栈链表

Java堆栈链表
EN

Stack Overflow用户
提问于 2013-02-26 12:41:28
回答 4查看 2.8K关注 0票数 1

我用下面几行代码声明了一个对象节点队列:

代码语言:javascript
复制
Queue<Node> queue;
queue = new LinkedList<Node>();

但是,当我声明Node对象的堆栈时,通过将队列替换为堆栈,它不起作用。为甚麽呢?另外,到底是什么

代码语言:javascript
复制
queue = new LinkedList<Node>(); 

卑劣?这是否意味着正在创建Node对象的链表,并且可以在队列中?

我正在学习开放式课件,学习数据结构和算法,我是一个初学者。谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-26 12:48:30

这是因为java.util.LinkedList实现了java.util.Queue,但它不是java.util.Stack,尽管它有push和pop方法。Stack是一个遗留类,不推荐使用它,但如果您仍然想要使用它,则可以这样做

代码语言:javascript
复制
Stack<Node> stack = new Stack<Node>();
票数 2
EN

Stack Overflow用户

发布于 2013-02-26 12:43:19

在Java语言中,由于遗留的原因,Stack是一个类,而不是一个接口。因此,不能将LinkedList赋值给Stack类型的变量。

Deque接口声明了后进先出操作(尽管它也声明了先进先出操作),而LinkedList实现了Deque

当你这样做的时候

代码语言:javascript
复制
queue = new LinkedList<Node>();

您正在创建一个LinkedList,但是通过类型Queue引用它,这样就只公开了FIFO操作。这将确保以后可以通过仅更改上面的行来替换Queue的其他实现。

票数 4
EN

Stack Overflow用户

发布于 2013-02-26 12:45:50

Queue<Node> queue说变量队列的类型是“节点队列”。Queue是一个接口而不是一个类。

Java的LinkedList类实现了Queue接口,所以queue = new LinkedList<Node>();完全没问题。

Java Stack是一个实际的类,它不实现Queue接口,因此您不能简单地将其替换为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15081473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档