如何在java中实例化Queue对象?

时间:2011-01-07 15:02:18

标签: java data-structures queue

当我尝试:

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

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

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

8 个答案:

答案 0 :(得分:144)

Queue是一个界面,这意味着您无法直接构建Queue

最好的选择是构建一个已经实现Queue接口的类,如下所示:AbstractQueueArrayBlockingQueueConcurrentLinkedQueue,{{1 }},DelayQueueLinkedBlockingQueueLinkedListPriorityBlockingQueuePriorityQueue

另一种方法是编写自己的类来实现必要的Queue接口。除了极少数情况下,你需要做一些特别的事情,同时为你的程序的其余部分提供SynchronousQueue

Queue

更少使用的替代方法是构造一个实现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

答案 1 :(得分:143)

Queue是一个界面。除非通过匿名内部类,否则无法直接实例化接口。通常,此不是您要为集合执行的操作。而是选择现有的实现。例如:

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

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

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

答案 2 :(得分:42)

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

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

由于Queue是一个接口,因此无法按照图示

创建它的实例

答案 3 :(得分:14)

Queue是一个接口,你不能显式构造一个Queue,你必须实例化它的一个实现类。类似的东西:

Queue linkedList = new LinkedList();

ħere's a link to the Java tutorial on this subject.

答案 4 :(得分:11)

enter image description here

Queue接口扩展了java.util.Collection以及其他插入,提取和检查操作,如:

+offer(element: E): boolean // 插入元素

+poll(): E // 检索元素并在队列为空时返回NULL

+remove(): E // 检索并删除元素,如果队列为空则抛出异常

+peek(): E // 检索但不删除此队列的头部,如果此队列为空,则返回null。

+element(): E // 如果队列为空,则检索但不删除此队列的头部会抛出异常。

实施队列的示例代码:

java.util.Queue<String> queue = new LinkedList<>();
queue.offer("Hello");
queue.offer("StackOverFlow");
queue.offer("User");

System.out.println(queue.peek());

while (queue.size() > 0){
    System.out.println(queue.remove() + " ");
}
//Since Queue is empty now so this will return NULL
System.out.println(queue.peek());

输出代码:

Hello
Hello 
StackOverFlow 
User 
null

答案 5 :(得分:6)

Queue是java中的一个接口,你不能这样做。

相反,您有两种选择:

选项1:

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

选项2:

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

我建议使用option2,因为它比其他

快一点

答案 6 :(得分:5)

Queue in Java被定义为接口,许多现成的实现作为JDK发布的一部分存在。 这里有一些: LinkedList,Priority Queue,ArrayBlockingQueue,ConcurrentLinkedQueue,Linked Transfer Queue,Synchronous Queue等。

所以你可以创建任何这些类并将其保存为队列引用。例如

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {

 public static void main (String[] args) {
  Queue que = new LinkedList();
  que.add("first");
  que.offer("second");
  que.offer("third");
  System.out.println("Queue Print:: " + que);

  String head = que.element();
  System.out.println("Head element:: " + head);

  String element1 = que.poll();
  System.out.println("Removed Element:: " + element1);

  System.out.println("Queue Print after poll:: " + que);
  String element2 = que.remove();
  System.out.println("Removed Element:: " + element2);

  System.out.println("Queue Print after remove:: " + que);  
 }
}

您还可以实现自己的自定义队列实现队列接口。

答案 7 :(得分:4)

Queue是java中的一个接口,你不能这样做。 尝试:

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