【发布时间】:2011-06-05 08:05:49
【问题描述】:
当我尝试时:
Queue<Integer> q = new Queue<Integer>();
编译器给了我一个错误。有什么帮助吗?
另外,如果我想初始化一个队列,我必须实现队列的方法吗?
【问题讨论】:
-
你需要队列是线程安全的吗?
标签: java data-structures queue
当我尝试时:
Queue<Integer> q = new Queue<Integer>();
编译器给了我一个错误。有什么帮助吗?
另外,如果我想初始化一个队列,我必须实现队列的方法吗?
【问题讨论】:
标签: java data-structures queue
Queue in Java 被定义为一个接口,许多现成的实现作为 JDK 版本的一部分存在。 这里有一些: LinkedList、优先队列、ArrayBlockingQueue、ConcurrentLinkedQueue、链接传输队列、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 linkedList = new LinkedList();
【讨论】:
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<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中的一个接口,你不能那样做。
试试:
Queue<Integer> Q = new LinkedList<Integer>();
【讨论】:
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
【讨论】:
队列是java中的一个接口,你不能那样做。
相反,您有两个选择:
选项1:
Queue<Integer> Q = new LinkedList<>();
选项2:
Queue<Integer> Q = new ArrayDeque<>();
我建议使用选项 2,因为它比其他选项快一点
【讨论】:
Queue 是一个接口。除了通过匿名内部类之外,您不能直接实例化接口。通常这不是你想为一个集合做的。相反,请选择现有的实现。例如:
Queue<Integer> q = new LinkedList<Integer>();
或
Queue<Integer> q = new ArrayDeque<Integer>();
您通常会根据您感兴趣的性能和并发特性来选择集合实现。
【讨论】: