[英]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中的所有东西都是对象?
队列是一个接口,这意味着我们无法直接构造队列。
我们可以通过实现类创建对象,实现了队列接口,象以下操作之一: AbstractQueue
, ArrayBlockingQueue
, ConcurrentLinkedQueue
, DelayQueue
, LinkedBlockingQueue
, LinkedList
, PriorityBlockingQueue
, PriorityQueue
,或SynchronousQueue
。
Stack是类 ,可以直接实例化。
这是设计和Queue
,有更多的选项使用实现类。
那是因为Queue
是一个interface
。 您只能实例化(非抽象)类。 尽管如此,结果实例仍然是一个Queue
。
Queue<Integer> queue = new LinkedList<>();
与List
相同
List<Integer> list = new LinkedList<>();
另一方面, Stack
是一个类,如Vector
(从中继承)或ArrayList
或LinkedList
。
如果是这样,为什么我们说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.