¿Cómo instanciar un objeto Queue en java?

Respuestas:

151

A Queuees una interfaz, lo que significa que no puede construir una Queuedirectamente.

La mejor opción es la construcción de una clase que ya implementa la Queueinterfaz, como uno de los siguientes: AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue, o SynchronousQueue.

Una alternativa es escribir su propia clase que implemente la interfaz de cola necesaria. No es necesario, excepto en aquellos casos raros en los que desea hacer algo especial mientras que proporciona el resto de su programa con una 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 ...
}

Una alternativa aún menos utilizada es construir una clase anónima que implemente Queue. Probablemente no quieras hacer esto, pero está en la lista como una opción para cubrir todas las bases.

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

   public boolean offer(Tree element) {
     ...
   };
   ...
};
Edwin Buck
fuente
21
Oh querido ... me temo que alguien que lea esto usará un anónimo Queue... pero de todos modos +1.
Tom
1
En realidad, Jon es más claro. Haré +1 en esto si lo actualiza para mencionar la concurrencia y deshacerse del código para las clases anónimas ... Creo que hace que la respuesta sea más confusa para alguien que quiere saber qué hacer porque seguramente no quiere Haz eso. (Incluso si quisieran su propia clase, no hay necesidad de hacerlo anónimo)
Tom
1
@Tom no eliminó la información de la clase anónima, ya que es bueno saber que es posible, pero puse el mensaje "Escriba su propia implementación" antes, lo que lo aleja más de las primeras alternativas (más comunes) enumeradas.
Edwin Buck el
1
¿Por qué no mencionarlo?ArrayDeque
JW.ZG
No puedo encontrar el método enqueue () en ninguna de las clases que mencionó, solo puedo encontrar el método add (), corríjame si me equivoco.
Sreekanth Karumanaghat
152

Queuees una interfaz No puede crear una instancia de una interfaz directamente, excepto a través de una clase interna anónima. Por lo general, esto no es lo que quieres hacer para una colección. En su lugar, elija una implementación existente. Por ejemplo:

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

o

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

Por lo general, elige una implementación de colección por las características de rendimiento y concurrencia que le interesan.

Jon Skeet
fuente
9
De ArrayDeque : "Es probable que esta clase sea más rápida que Stack cuando se usa como stack, y más rápida que LinkedList cuando se usa como cola". Se debe a la localidad de datos compatible con el caché de la CPU y las asignaciones menos frecuentes.
Vadzim
42
Queue<String> qe=new LinkedList<String>();

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

Dado que Queuees una interfaz, no puede crear una instancia de la misma como lo ilustra

Jigar Joshi
fuente
1
java.util.Queuees una interfaz No puedes instanciar interfaces. Debe crear una instancia de una clase que implemente esa interfaz. En este caso, LinkedList es una clase de este tipo.
Mihai Toader el
@Tod sí estaba en camino .. :)
Jigar Joshi
Gracias @JigarJoshi !! ¿Hay alguna manera de hacer lo mismo con la pila? No pude encontrar nada.
Zehra Subaş
@ZehStack<String> stack = new Stack<>(); stack.push("a"); stack.push("b"); System.out.println(stack.pop()); import java.util.Stack;
Jigar Joshi
15

Queue es una interfaz; no puedes construir explícitamente una cola. Tendrá que crear una instancia de una de sus clases de implementación. Algo como:

Queue linkedList = new LinkedList();

Aquí hay un enlace al tutorial de Java sobre este tema.

zmf
fuente
esto ya no funciona ..! Aunque esta declaración funciona -> Queue <Character> queue = new ArrayDeque <Character> ();
Md Faisal
@MdFaisal funciona bien para mí con la versión de Java "1.7.0_71"
zmf
12

ingrese la descripción de la imagen aquí

La interfaz Queue extiende java.util.Collection con operaciones adicionales de inserción, extracción e inspección como:

+offer(element: E):booleano // Insertar un elemento

+poll(): E // Recupera el elemento y devuelve NULL si la cola está vacía

+remove(): E// Recupera y elimina el elemento y lanza una excepción si la cola está vacía

+peek(): E// Recupera, pero no elimina, el encabezado de esta cola, devolviendo nulo si esta cola está vacía.

+element(): E// Recupera, pero no elimina, el encabezado de esta cola, emite una excepción si la cola está vacía.

Código de ejemplo para implementar 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());

Salida del código:

Hello
Hello 
StackOverFlow 
User 
null
devDeejay
fuente
7

Queue es una interfaz en java, no puedes hacer eso.

En cambio, tienes dos opciones:

Opción 1:

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

opcion 2:

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

Recomiendo usar la opción 2, ya que es un poco más rápido que el otro

Sujit
fuente
5

La cola en Java se define como una interfaz y muchas implementaciones listas para usar están presentes como parte del lanzamiento de JDK. Aquí hay algunos: LinkedList , Priority Queue, ArrayBlockingQueue, ConcurrentLinkedQueue, Linked Transfer Queue, Synchronous Queue etc.

SO Puede crear cualquiera de estas clases y mantenerla como referencia de cola. por ejemplo

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

También puede implementar su propia cola personalizada que implementa la interfaz de cola.

Java Guru
fuente
4

Queuees una interfaz en java, no podrías hacer eso. tratar:

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