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

时间:2016-01-27 05:52:04

标签: java stack queue

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

队列是一个界面,这意味着我们无法直接构建队列。

我们可以使用实现类创建对象,实现Queue接口,如下所示:AbstractQueueArrayBlockingQueueConcurrentLinkedQueueDelayQueue,{{1} },LinkedBlockingQueueLinkedListPriorityBlockingQueuePriorityQueue

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

这是设计使用SynchronousQueue,使用实现类的选项还有很多。

答案 1 :(得分:4)

这是因为Queueinterface。您只能实例化(非抽象)类。然而,结果实例仍然是Queue

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

List

相同
List<Integer> list = new LinkedList<>();
另一方面,

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

  

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

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

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

答案 2 :(得分:0)

Queue,无法实现接口。它还有其他可以使用的实现。

这是一个可能的实现:

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

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

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