当我尝试:
Queue<Integer> q = new Queue<Integer>();
编译器给我一个错误。有什么帮助吗?
另外,如果要初始化队列,是否必须实现队列的方法?
当我尝试:
Queue<Integer> q = new Queue<Integer>();
编译器给我一个错误。有什么帮助吗?
另外,如果要初始化队列,是否必须实现队列的方法?
Answers:
A Queue
是一个接口,这意味着您不能Queue
直接构造一个。
最好的办法是建立关闭一类已经实现了Queue
接口,像下面的一个:AbstractQueue
,ArrayBlockingQueue
,ArrayDeque
,ConcurrentLinkedQueue
,DelayQueue
,LinkedBlockingQueue
,LinkedList
,PriorityBlockingQueue
,PriorityQueue
,或SynchronousQueue
。
一种替代方法是编写您自己的类,该类实现必要的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
...但是无论如何还是+1。
ArrayDeque
Queue
是一个接口。除了通过匿名内部类,您不能直接实例化接口。通常,这不是您要为集合执行的操作。而是选择一个现有的实现。例如:
Queue<Integer> q = new LinkedList<Integer>();
要么
Queue<Integer> q = new ArrayDeque<Integer>();
通常,您可以根据您感兴趣的性能和并发特性来选择集合实现。
Queue<String> qe=new LinkedList<String>();
qe.add("b");
qe.add("a");
qe.add("c");
由于Queue
是一个接口,因此无法如图所示创建它的实例
java.util.Queue
是一个接口。您不能实例化接口。您需要创建实现该接口的类的实例。在这种情况下,LinkedList就是此类。
Stack<String> stack = new Stack<>(); stack.push("a"); stack.push("b"); System.out.println(stack.pop());
import java.util.Stack;
Queue接口通过其他插入,提取和检查操作扩展了java.util.Collection,例如:
+offer(element: E):
布尔// 插入元素
+poll(): E
// 检索元素,如果队列为空,则返回NULL
+remove(): E
// 检索并删除元素,如果queue为空,则引发Exception
+peek(): E
// 检索但不删除此队列的头部,如果此队列为空,则返回null。
+element(): E
// 检索但不删除此队列的头,如果te队列为空,则引发异常。
实现队列的示例代码:
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
Java队列中的Queue被定义为接口,并且JDK版本中提供了许多现成的实现。这里有一些: LinkedList,Priority Queue,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接口。