2009-04-29 21 views

Respuesta

7

La documentación para Queue enumera varias implementaciones, incluyendo

elegir una aplicación que se adapte a sus necesidades.

+0

Según http://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html, ArrayList no implementa cola. –

+0

Sí, me di cuenta de eso cuando volví para obtener algunos enlaces; obviamente mi memoria es defectuosa – Rob

+2

Sucede. Me impresionaría si tienes toda la biblioteca de Java memorizada. Si hubieras memorizado EE, retrocedería lentamente. –

31

El Javadocs proporciona una lista de clases que implementan Queue.

Todas las clases de implementación conocidos:

AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedBlockingDeque, LinkedList, PriorityBlockingQueue, PriorityQueue, SynchronousQueue

También hay algunos subinterfaces cuales puede ser útil:

Todos Subinterfaces conocidos:

BlockingDeque < E>, BlockingQueue < E>, Deque < E>

+9

Me pregunto por qué la gente no va a JavaDocs: P +1 – Perpetualcoder

+4

¿no es el desbordamiento de pila más rápido que google? – IAdapter

+5

Para la gente realmente floja, voy a notar que todos los que tienen DeQue son colas de doble final. – Powerlord

10

cola tiene múltiples implementaciones: desde la API:

Todos Clases de implementación conocidas:

AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, 
DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList, 
PriorityBlockingQueue, PriorityQueue, SynchronousQueue 

Tenga en cuenta que AbstractQueue no es una clase concreta.

Algunos de estos son del paquete concurrente, por lo que si está implementando una cola de trabajo o algo similar, debe ir a ConcurrentLinkedQueue o PriorityBlockingQueue (para un montón) para ej.

3

Además de usar los documentos de API para encontrar "todas las clases de implementación conocidas", a menudo hay otras implementaciones no públicas que, sin embargo, están disponibles a través de la API pública (solo sin requerir resmas de documentación inútil). Si hace clic en "use", también encontrará Collections.asLifoQueue (Deque ya es un Queue, pero es FIFO en lugar de una pila).

+0

De vez en cuando, redescubro las páginas de "Uso" y pienso: "¡Oye, esto es genial!" Y luego los olvido de nuevo. –

+0

Las páginas de "uso" no tienen la mayor cantidad de UI. –

2

Aunque las respuestas suenan algo desdeñosas, en realidad están siendo geniales enseñándote a pescar.Una cola es simplemente una forma de ver una colección, por lo que muchas colecciones pueden implementarla. Además, las cosas que actúan como colecciones pero con otra lógica específica (como las colas de hilos) pueden usar la misma interfaz.

Saber dónde mirar los javadocs es de gran ayuda. Estoy seguro de que miraste pero no pensaste en mirar las implementaciones. Vive y aprende.

A veces también puede tener que buscar listas de subclase/extensiones. Como si mirases a Queue y veas AbstractQueue, es posible que quieras ver qué clases implementan eso.

Me desharé de uno de sus -1S para ti :)

0
import java.util.Queue; 

sólo que

Enqueue function == Queue_Object.add(input_value); 

Dequeue function == Queue_Object.pull(); //return the value and delete it from queue 
2

No, no hay una clase Queue, porque hay un montón de diferentes maneras para implementar una cola y debes elegir la que mejor se adapte a tu caso de uso. Lo mismo ocurre con cualquiera de las otras colecciones en el marco de colecciones; por ejemplo, ArrayList y LinkedList ambos implementan un List. El patrón general, que es un buen uso de la herencia de objetos, es:

La interfaz , p. Queue, define el rol que desea que juegue un objeto;

Subinterfaces, p. Ej. Deque, amplía o especializa el rol; en este caso, una cola "deque" o de doble extremo le permite agregar y eliminar elementos de ambos extremos de la cola, en lugar de solo agregar al reverso y eliminar desde el frente;

Las clases proporcionan la implementación de cómo un objeto lleva a cabo la función. Por ejemplo, un ArrayDeque usa una matriz redimensionable para implementar una cola de doble extremo, que tiene diferentes fortalezas y debilidades a LinkedList que usa una lista vinculada.

dar más detalles sobre la idea de una interfaz como un papel, tenga en cuenta que a pesar de que implementa ArrayDequeDeque, se puede usar como un Queue sin tener que preocuparse de que, debido a la implementación de ambas interfaces significa que puede desempeñar ambos papeles. Del mismo modo, LinkedList puede usar un sombrero List, Queue o Deque.

Por esta razón, la forma normal (recomendada) de usar algo como el marco de colecciones es programa a la interfaz, es decir, utilizar una interfaz cuando se usa la clase en lugar del nombre de la clase. Por ejemplo, podría crear un objeto como éste:

Queue<String> logQueue = new ConcurrentLinkedQueue<String>(); 
... 
logQueue.add("Log message"); 

De esta manera usted está

  • no están vinculados a una clase particular y puede utilizar una gota en el reemplazo si es necesario sin tener que modificar mucho código, y
  • están documentando lo que está haciendo con una clase nombrando la función que desempeña. El principio general con el que se ayuda es código de auto-documentación, que es esencialmente para permitir que el código sea autoexplicativo sin tener que usar comentarios, etc.
1
Queue<Integer> queue = new LinkedList<>(); 

queue.add(1); 
queue.add(2); 
queue.add(3); 

while (!queue.isEmpty()) { 
    System.out.println(queue.remove());// prints 1 2 3 
} 
Cuestiones relacionadas