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

当我尝试:

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

编译器出错了,有帮助吗?

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

371197 次浏览
Queue<String> qe=new LinkedList<String>();


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

因为 Queue是一个接口,所以不能像您说明的那样创建它的实例

Queue是一个接口,这意味着您不能直接构造 Queue

最好的选择是构造一个已经实现了 Queue接口的类,比如以下类之一: AbstractQueueArrayBlockingQueueArrayDequeConcurrentLinkedQueueDelayQueueLinkedBlockingQueueLinkedListPriorityBlockingQueuePriorityQueueAbstractQueue0。

另一种方法是编写自己的类,该类实现必要的 Queue 接口。它不是必需的,除非在一些罕见的情况下,您希望做一些特殊的同时提供一个 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的匿名类。您可能不想这样做,但为了覆盖所有基础,它被列为一个选项。

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


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

Queue 是一个接口; 不能显式构造 Queue。您必须实例化它的一个实现类。比如:

Queue linkedList = new LinkedList();

这里有一个关于这个主题的 Java 教程的链接。

Queue 是一个接口。除非通过匿名内部类,否则不能直接实例化接口。通常这个 不是是您希望为集合执行的操作。相反,选择一个现有的实现。例如:

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

或者

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

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

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

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

Queue 是 Java 中的一个接口,你不能这么做。

相反,你有两个选择:

选择一:

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

选择二:

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

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

Java 中的 Queue 被定义为一个接口,并且许多现成的实现作为 JDK 发行版的一部分出现。 这里有一些: LinkedList ,优先级队列,ArrayBlockingQueue,ConcurrentLinkedQueue,链接传输队列,同步队列等等。

因此,您可以创建这些类中的任何一个,并将其保存为 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 接口。

enter image description here

Queue 接口扩展了 java.util. Collection,并附加了插入、提取和检查操作,如:

布尔值//插入元素

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

+remove(): E//检索并移除元素,如果队列为空则引发 Exception

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

+element(): E//检索但不删除此队列的头,如果 te 队列为空,则引发异常。

实现 Queue 的示例代码:

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