繁体   English   中英

为什么我们可以实例化堆栈而不是队列?

[英]Why can we instantiate a stack but not a queue?

为什么我可以像这样实例化一个堆栈:

Stack<Integer> stack = new Stack<>();

但无法像这样实例化队列:

Queue<Integer> queue = new Queue<>();

那是因为队列是一个接口而stack is a object吗? 如果是这样,为什么我们说java中的所有东西都是对象?

队列是一个接口,这意味着我们无法直接构造队列。

我们可以通过实现类创建对象,实现了队列接口,象以下操作之一: AbstractQueueArrayBlockingQueueConcurrentLinkedQueueDelayQueueLinkedBlockingQueueLinkedListPriorityBlockingQueuePriorityQueue ,或SynchronousQueue

Stack是类 ,可以直接实例化。

这是设计和Queue ,有更多的选项使用实现类。

那是因为Queue是一个interface 您只能实例化(非抽象)类。 尽管如此,结果实例仍然是一个Queue

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

List相同

List<Integer> list = new LinkedList<>();

另一方面, Stack是一个类,如Vector (从中继承)或ArrayListLinkedList

如果是这样,为什么我们说java中的所有东西都是对象?

我们可能不应该这样说(看到还有像int这样的非对象),但更重要的是,任何Queue实例(必须是像LinkedList这样的实例)都是一个Object (以及一个Collection和一个Iterable )。

Object是Java中所有对象类型的根。 所以从这个意义上讲,一切都是Java中的Object (其他一些语言对所有对象都没有共同的根类型)。

作为接口的队列无法实现。 它还有其他可以使用的实现。

这是一个可能的实现:

Queue<Integer> q1 = new LinkedList()<Integer>;

有关实现队列接口的类的更多信息,请访问此页面:

https://docs.oracle.com/javase/7/docs/api/java/util/Queue.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM