Pregunta ¿Por qué Stack es una clase mientras Queue es una interfaz? [cerrado]


Creo que son muy similares ... ¿Y cuándo necesitamos usar stack o queue, por qué no usar ArrayList o LinkedList para reemplazarlos?


14
2017-07-16 01:00


origen


Respuestas:


Stack, es una pila de objetos Last-In-First-Out derivados de Vector, también una clase. Vector va con el "viejo" conjunto de colecciones que Java originalmente envió, y deriva en última instancia de AbstractCollection. De nota, hay realmente una implementación canónica de un Stack; Queues y Lists tiene muchos implementaciones bien conocidas que pueden hacer una diferencia de rendimiento sustancial cuando se eligen correctamente.

Queue por otro lado sigue el Collection interfaz del "nuevo" conjunto de colecciones que se utilizan normalmente hoy en día, por lo que sigue las interfaces y viene con una variedad de implementaciones.

Stacks debe usarse cuando necesita semántica de LIFO, Queues debe usarse cuando necesita la semántica de Primero en entrar, primero en salir.

ArrayList y LinkedList almacenar ordenado colecciones de cosas, y no se alinean con los casos de uso de Stack o Queue directamente. Stacks y Queues son, en cierto sentido, buffers de datos, mientras que la semántica de un List típicamente lo hacen tal que es una reserva de datos; nada te impide usar un List para implementar un Stack o una Queue.


6
2017-07-16 01:03



Bueno, una de las razones es que hay variantes de colas que es conveniente poder intercambiar, como PriorityQueues. Cumplen la misma interfaz pero se comportan de manera diferente. No creo que exista algo así para Stacks, o al menos no se usa con la misma frecuencia.

No podría simular una Cola de Prioridad usando solo una ArrayList.

Además, con respecto a su segunda pregunta, probablemente debería usar una pila o cola cuando eso es lo que está usando semánticamente. Es decir, si está haciendo algo como cruce de gráficos, ayuda a ser muy explícito sobre el tipo de estructura de datos que está utilizando.


7
2017-07-16 01:02