¿Cómo creo una instancia de un objeto Queue en java?

6 minutos de lectura

avatar de usuario
wam090

Cuando intento:

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

El compilador me está dando un error. ¿Alguna ayuda?

Además, si quiero inicializar una cola, ¿tengo que implementar los métodos de la cola?

Queue es una interfaz. No puede crear instancias de una interfaz directamente, excepto a través de una clase interna anónima. Típicamente 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 simultaneidad que le interesan.

  • De ArrayDeque: “Es probable que esta clase sea más rápida que Stack cuando se usa como pila, y más rápida que LinkedList cuando se usa como cola”. Se debe a la localidad de datos compatible con la memoria caché de la CPU y las asignaciones menos frecuentes.

    – Vadzim

    30 sep 2016 a las 18:13

avatar de usuario
edwin dólar

A Queue es una interfaz, lo que significa que no puede construir una Queue directamente.

La mejor opción es construir una clase que ya implemente el Queue interfaz, como una de las siguientes: AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueueo SynchronousQueue.

Una alternativa es escribir su propia clase que implemente la interfaz de cola necesaria. No es necesario, excepto en los raros casos en los que desea hacer algo especial mientras proporciona al resto de su programa 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 quiera hacer esto, pero aparece como una opción para cubrir todas las bases.

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

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

  • Dios mío… Temo que alguien que lea esto use un anónimo Queue… pero +1 de todos modos.

    – Tomás

    7 de enero de 2011 a las 23:05

  • En realidad, el de Jon es más claro. Haré +1 en esto si lo actualizas para mencionar la concurrencia y eliminar el código de las clases anónimas… Creo que hace que la respuesta sea más confusa para alguien que quiere saber qué hacer porque casi seguramente no quiere Haz eso. (Incluso si quisieran su propia clase, no hay necesidad de hacerlo anónimo)

    – Tomás

    7 de enero de 2011 a las 23:08

  • @Tom no eliminó la información de clase anónima, ya que es bueno saber que es posible, pero puse “Escriba su propia implementación” antes, lo que lo aleja aún más de las primeras alternativas enumeradas (más comunes).

    – Edwin Buck

    10 de enero de 2011 a las 4:51

  • ¿Por qué no mencionar ArrayDeque

    – JW.ZG

    11 de diciembre de 2016 a las 22:59

  • 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

    21 de julio de 2020 a las 9:33

avatar de usuario
jmj

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

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

Ya que Queue es una interfaz, no puede crear una instancia de ella como lo ilustró

  • java.util.Queue es una interfaz. No puede instanciar interfaces. Debe crear una instancia de una clase que implemente esa interfaz. En este caso, LinkedList es una clase de este tipo.

    – Mihai Sapo

    7 de enero de 2011 a las 15:05

  • @Tod sí estaba en camino .. 🙂

    – jmj

    7 de enero de 2011 a las 15:06

  • Gracias @JigarJoshi!! ¿Hay alguna forma de hacer lo mismo con la pila? No pude encontrar nada.

    – Zehra Subaş

    7 junio 2018 a las 23:28

  • @Zeh Stack<String> stack = new Stack<>(); stack.push("a"); stack.push("b"); System.out.println(stack.pop()); import java.util.Stack;

    – jmj

    8 de junio de 2018 a las 7:30


avatar de usuario
zmf

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

Queue linkedList = new LinkedList();

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

ingrese la descripción de la imagen aquí

La interfaz Queue amplía 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 y devuelve un valor nulo si esta cola está vacía.

+element(): E // Recupera, pero no elimina, el encabezado de esta cola, genera 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

avatar de usuario
Sujit

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

En su lugar 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

avatar de usuario
drac_o

Cola en Java se define como una interfaz y muchas implementaciones listas para usar están presentes como parte del lanzamiento de JDK. Aquí están algunas:
Lista enlazadaPriority Queue, ArrayBlockingQueue, ConcurrentLinkedQueue, Linked Transfer Queue, Cola síncrona etc.

SO Puede crear cualquiera de estas clases y mantenerlo 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.

¿Ha sido útil esta solución?