如何在java中实例化队列对象?

如何在java中实例化队列对象?,java,data-structures,queue,Java,Data Structures,Queue,当我尝试时: Queue<Integer> q = new Queue<Integer>(); Queue q=新队列(); 编译器给了我一个错误。有什么帮助吗 此外,如果要初始化队列,是否必须实现队列的方法?queue qe=new LinkedList(); Queue<String> qe=new LinkedList<String>(); qe.add("b"); qe.add("a"); qe.add("c"); qe.添加(“b

当我尝试时:

Queue<Integer> q = new Queue<Integer>();
Queue q=新队列();
编译器给了我一个错误。有什么帮助吗

此外,如果要初始化队列,是否必须实现队列的方法?

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

qe.add("b");
qe.add("a");
qe.add("c");
qe.添加(“b”); qe.添加(“a”); qe.添加(“c”);

因为是一个接口,所以您不能创建它的实例,如您所示,队列是一个接口,这意味着您不能直接构造队列

最好的选择是构造一个已经实现了
队列
接口的类,比如:
抽象队列
数组锁定队列
数组定义
并发链接队列
延迟队列
链接锁定队列
链接列表
PriorityBlockingQueue
PriorityQueue
SynchronousQueue

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 ...
}
另一种方法是编写自己的类来实现必要的队列接口。它不需要,除非在少数情况下,您希望在为程序的其余部分提供
队列的同时做一些特殊的事情

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 linkedList = new LinkedList();
是一个接口。除非通过匿名内部类,否则不能直接实例化接口。通常,这不是您希望为集合执行的操作。相反,选择一个现有的实现。例如:

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

Queue q=new ArrayDeque();

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

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

Queue Q=newlinkedlist();

队列是java中的一个接口,您不能这样做

相反,您有两个选择:

备选案文1:

Queue<Integer> Q = new LinkedList<>();
Queue Q=newlinkedlist();
备选案文2:

Queue<Integer> Q = new ArrayDeque<>();
Queue Q=new ArrayDeque();
我建议使用option2,因为它比另一个快一点。

被定义为一个接口,许多现成的实现作为JDK发行版的一部分出现。 以下是一些: 、优先级队列、ArrayBlockingQueue、ConcurrentLinkedQueue、链接传输队列等

因此,您可以创建这些类中的任何一个,并将其作为队列引用保存。比如说

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);  
 }
}
您还可以实现自己的自定义队列实现队列接口。

队列接口通过附加的插入、提取和检查操作扩展了java.util.Collection,如:

+报价(元素:E):
布尔值//插入元素

+poll():E
/检索元素,如果队列为空,则返回NULL

+remove():E
/检索并删除元素,并在队列为空时引发异常

+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());

java.util.Queue
是一个接口。不能实例化接口。您需要创建实现该接口的类的实例。在本例中,LinkedList就是这样一个类。@Tod yes正在进行中。:)谢谢@JigarJoshi!!有没有办法用stack做同样的事情?我找不到任何东西。@Zeh
Stack-Stack=new-Stack();堆叠。推送(“a”);堆叠。推送(“b”);System.out.println(stack.pop())
导入java.util.Stack
您需要队列是线程安全的吗?
queue
是一个接口。哦,天哪。。。我担心读到这篇文章的人会使用匿名的
队列
。。。但无论如何+1。事实上,乔恩的更清楚。如果您更新它以提及并发性并删除匿名类的代码,我将+1它。。。我认为这让那些想知道该做什么的人更加困惑,因为他们几乎肯定不想这样做。(即使他们想要自己的类,也没有必要让它匿名)@Tom没有拿出匿名类信息,因为很高兴知道这是可能的,但我在它前面加入了“编写自己的实现”,这使它与第一个列出的(更常见的)更为遥远备选方案。为什么不提及
ArrayDeque
我在您提到的任何类中都找不到enqueue()方法,我只能找到add()方法,如果我错了,请纠正我。这不再有效了。。!尽管此声明有效-->队列队列=新ArrayQueue()@MdFaisal在java版本“1.7.0_71”中适用于我:“当用作堆栈时,该类可能比堆栈快,当用作队列时,可能比LinkedList快”。这是由于CPU缓存友好的数据位置和较不频繁的分配。
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);  
 }
}
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