数据结构 - 如何在java中实例化Queue对象?

当我尝试:

Queue q = new Queue();

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

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


Queue是一个接口,这意味着您无法直接构造AbstractQueue。

最佳选择是构造已经实现Queue接口的类,如下所示之一:AbstractQueue,ArrayBlockingQueue,ConcurrentLinkedQueue,DelayQueue,LinkedBlockingQueue,LinkedList,PriorityBlockingQueue,PriorityQueue或SynchronousQueue。

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

public class MyQueue implements Queue {
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() {
public Tree element() {
...
};
public boolean offer(Tree element) {
...
};
...
};


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

Queue q = new LinkedList();

要么

Queue q = new ArrayDeque();

通常,您可以通过您感兴趣的性能和并发特性来选择集合实现。


Queue qe=new LinkedList();
qe.add("b");
qe.add("a");
qe.add("c");

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


Queue是一个接口,您无法显式构造Queue,您必须实例化其中一个实现类。 就像是:

Queue linkedList = new LinkedList();

这是关于此主题的Java教程的链接。


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

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

+element(): E //检索元素,如果queue为空,则返回NULL

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

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

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

实现队列的示例代码:

java.util.Queue 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


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

相反,你有两个选择:

选项1:

Queue Q = new LinkedList<>();

选项2:

Queue Q = new ArrayDeque<>();

我建议使用option2,因为它比另一个快一点


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);
}
}

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


Queue是java中的一个接口,你无法做到这一点。尝试:

Queue Q = new LinkedList();