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
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
, PriorityQueue
o 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
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
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();
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
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
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.
¿Necesita que la cola sea segura para subprocesos?
– Peter Lawrey
7 de enero de 2011 a las 16:40
Queue
es una interfaz. grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/…– roottraveller
29 de septiembre de 2017 a las 15:11