问题

当我尝试:

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

编译器给我一个错误。有帮助吗?

另外,如果我想初始化队列,我是否必须实现队列的方法?


#1 热门回答(136 赞)

AQueue是一个接口,这意味着你无法直接构造aQueue

最好的选择是构造一个已经实现了Queue接口的类,如下所示:AbstractQueue,ArrayBlockingQueue,ConcurrentLinkedQueue,DelayQueue,LinkedBlockingQueue,LinkedList,PriorityBlockingQueue,PriorityQueueSynchronousQueue

另一种方法是编写自己的类来实现必要的Queue接口。除非在极少数情况下你希望在为程序的其余部分提供aQueue时执行某些特殊操作,否则不需要它。

public class MyQueue<T extends Tree> implements Queue<T> {
   public T element() {
     ... your code to return an element goes here ...
   }

   public boolean offer(T element) {
     ... your code to accept a submission offer goes here ...
   }

   ... etc ...
}

一个更少使用的替代方法是构造一个实现Queue的匿名类。你可能不想这样做,但为了覆盖所有基础,它被列为一个选项。

new Queue<Tree>() {
   public Tree element() {
     ...
   };

   public boolean offer(Tree element) {
     ...
   };
   ...
};

#2 热门回答(135 赞)

Queue是一个界面。除非通过匿名内部类,否则无法直接实例化接口。通常,这不是你想要为集合做什么。而是选择现有的实现。例如:

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

要么

Queue<Integer> q = new ArrayDeque<Integer>();

通常,你会根据你感兴趣的性能和并发特性选择集合实现。


#3 热门回答(39 赞)

Queue<String> qe=new LinkedList<String>();

qe.add("b");
qe.add("a");
qe.add("c");

由于Queue是一个接口,因此无法如图所示创建它的实例


原文链接