Creo que son muy similares ... ¿Y cuándo necesitamos usar la pila o la cola, por qué no simplemente usar ArrayList o LinkedList para reemplazarlos?¿por qué Stack es una clase mientras Queue es una interfaz?
Respuesta
Stack
, es una pila de objetos Last-In-First-Out derivada 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 Stack
; Queue
sy List
s tienen muchas implementaciones bien conocidas que pueden hacer una diferencia de rendimiento sustancial cuando se eligen correctamente.
Queue
Por otro lado, sigue la interfaz Collection
del "nuevo" conjunto de colecciones que se utilizan normalmente en la actualidad, por lo que sigue las interfaces y viene con una variedad de implementaciones.
Stack
s se deben usar cuando se necesita semántica LIFO, mientras que Queue
s se deben usar cuando se necesita la semántica Primero en entrar primero en salir.
ArrayList
y LinkedList
tienda ordenó colecciones de cosas, y no se alinean con los casos de uso de Stack
o Queue
directamente. Stack
sy Queue
s son, en cierto sentido, buffers de datos, mientras que la semántica de un List
suele hacer que sea un almacén de datos; nada le impide usar un List
para implementar un Stack
o un Queue
.
Bueno, una de las razones es que hay variantes de colas que es conveniente poder intercambiar, como las prioridades. 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 utilizando 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.
Muchas gracias – Yang
- 1. Stack and Queue, ¿Por qué?
- 2. ¿Por qué UtteranceProgressListener no es una interfaz?
- 3. ¿Qué es una interfaz fluida?
- 4. ¿Qué es "stack thrash"?
- 5. Observable Stack and Queue
- 6. ¿Qué es una interfaz privada?
- 7. ¿Por qué String es una clase?
- 8. ¿Por qué es android.os.Bundle una clase final?
- 9. ¿Por qué Stack <T> y Queue <T> se implementan con una matriz?
- 10. IoC (Windsor) - ¿Qué es una "Interfaz predeterminada"?
- 11. ¿Qué es una clase parcial?
- 12. C++ deque vs queue vs stack
- 13. ¿Es una interfaz de Java una clase abstracta?
- 14. ¿Qué es una "interfaz web vainilla"?
- 15. ¿Qué es una interfaz en Java?
- 16. ¿qué es una interfaz estática en java?
- 17. ¿Por qué es necesario marcar una clase como serializable?
- 18. ¿Qué es una interfaz e implementación de clase Objective-C 2.0 convertida por GCC o Clang
- 19. ¿Por qué Queue (T) y Stack (T) no implementan ICollection (T)?
- 20. ¿Por qué una clase interna serializable no es serializable?
- 21. ¿Por qué debería preferirse la interfaz para una clase Java?
- 22. AS3 - ¿Puedo saber si una clase implementa una interfaz (o es una subclase de otra clase)?
- 23. Tiempo de compilación compruebe si una clase base es "interfaz"
- 24. ¿Por qué una interfaz no puede implementar otra interfaz?
- 25. ¿Cómo identificar si la referencia de clase es una interfaz?
- 26. ¿Qué es una implementación adecuada de la interfaz IAsyncResult?
- 27. ¿Qué es una clase de extensión?
- 28. ¿Qué es una clase en PHP?
- 29. ¿Qué es una clase de controlador? (Java)
- 30. ¿Qué es una clase invariante en java?
Debería leer un buen libro de estructuras de datos. En pocas palabras: las restricciones pueden mejorar el rendimiento y aumentar la simplicidad de la comprensión del código. –
Porque los diseñadores de Java apestan en las API. Stack ** debe ** haber sido una interfaz, por lo que puede haber diferentes implementaciones de stacks. Por ejemplo, una pila basada en listas de arreglos y una pila basada en listas enlazadas. En su lugar, tomaron un atajo y subclasificaron Vector para crear algún tipo de pila de franken que expone una gran cantidad de detalles de implementación incorrectos de su principal. Hicieron un intento de corregir esto creando un Deque (es decir, otra implementación de pila) pero solo crearon más confusión. –