为什么我可以像这样实例化一个堆栈:
Stack<Integer> stack = new Stack<>();
但无法像这样实例化队列:
Queue<Integer> queue = new Queue<>();
这是因为队列是stack is a object
时的接口吗?
如果是这样,为什么我们说java中的所有东西都是对象?
答案 0 :(得分:4)
队列是一个界面,这意味着我们无法直接构建队列。
我们可以使用实现类创建对象,实现Queue接口,如下所示:AbstractQueue
,ArrayBlockingQueue
,ConcurrentLinkedQueue
,DelayQueue
,{{1} },LinkedBlockingQueue
,LinkedList
,PriorityBlockingQueue
或PriorityQueue
。
Stack是类,可以直接实例化。
这是设计使用SynchronousQueue
,使用实现类的选项还有很多。
答案 1 :(得分:4)
这是因为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
(其他一些语言对所有对象都没有共同的根类型)。
答案 2 :(得分:0)
Queue,无法实现接口。它还有其他可以使用的实现。
这是一个可能的实现:
Queue<Integer> q1 = new LinkedList()<Integer>;
访问此页面以获取有关实现队列接口的类的更多信息:
https://docs.oracle.com/javase/7/docs/api/java/util/Queue.html