Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Cola con doble extremo | Additional Data Structures
course content

Contenido del Curso

Java Data Structures

Cola con doble extremoCola con doble extremo

Cola doble

Este capítulo no será muy largo; ampliará el anterior. Deque, o cola de doble extremo, ayuda a trabajar con colas tanto por delante como por detrás.

The Deque interface extends the Queue interface and represents a double-ended queue, where elements can be added and retrieved from both the front and the back.

La interfaz Deque extiende la interfaz Queue, por lo que una clase como LinkedList también implementa esta interfaz (me sorprende lo versátil que es LinkedList). Por lo tanto, usaremos de nuevo LinkedList, pero esta vez con una nueva interfaz.

Declarar un objeto con el tipo Deque no es diferente de Queue:

java

main.java

La diferencia principal entra en juego cuando pasamos a los métodos de esta interfaz. Dado que Deque es una cola de doble extremo, lo que significa que puedes trabajar con elementos tanto al principio como al final de la cola, sus métodos están adaptados a esta característica.

Métodos

Algunos métodos clave de la interfaz Deque son:

  • addFirst(elemento): Añade un elemento al principio del deque.
  • addLast(elemento): Añade un elemento al final del deque.

Evidentemente, en un deque habría métodos para añadir al principio y al final. Los nombres de estos métodos son autoexplicativos.

Veamos estos métodos en código:

java

main.java

Como puede ver, después de usar el método addFirst(), el elemento se añadió al principio del deque. Esto lo distingue del método addLast().

Deque también tiene un método regular add(), que funciona igual que el método addLast(). Por lo tanto, la elección del método a utilizar es totalmente suya.

Sigamos.

Métodos de eliminación

Si hay métodos para añadir elementos al principio y al final, también debería haber métodos para eliminar del principio y del final del deque.

  • EliminarPrimero()`: Elimina y devuelve el elemento del principio del deque.
  • EliminarÚltimo()`: Elimina y devuelve el elemento del final del deque.

Los métodos addFirst() y addLast() realizan la eliminación de elementos del principio y del final del deque. Veamos un ejemplo de uso en el código:

java

main.java

Como puedes ver, hemos eliminado el primer y el último elemento del deque, dejando sólo el segundo elemento. Es simple y conveniente, y los nombres de los métodos hablan por sí mismos.

Nota

Para asegurarte de que tu programa y tus métodos son igualmente comprensibles, vale la pena darles nombres claros. El nombre de una variable/método/clase debe indicar lo que hace ese método. Intenta evitar nombres como "a", "var1/var2", etc. Con este enfoque a la hora de escribir código, te será mucho más fácil trabajar con tus propios métodos.

Métodos de recuperación

A continuación, pasemos a los métodos de recuperación de elementos del deque.

  • getPrimero(): Devuelve, pero no elimina, el elemento del principio del deque.
  • getLast(): Devuelve, pero no elimina, el elemento del final del deque.

Podemos acceder al primer y último elemento de una cola de doble extremo. Veamos tradicionalmente la implementación en el código:

java

main.java

Usando los métodos getFirst() y getLast(), recuperamos el primer y último elemento del deque y los asignamos a variables recién creadas.

En la interfaz Deque, también existen los métodos peekFirst() y peekLast(), que tratan el problema de lanzar una excepción. En lugar de lanzar una excepción y detener el programa, devuelven null si la cola está vacía. Veamos un ejemplo:

java

main.java

A partir de este ejemplo, se hizo evidente que es mucho mejor usar los métodos peekFirst() y peekLast() en lugar de usar los métodos getFirst() y getLast(), ya que no detendrán el programa en caso de error.

Sin embargo, ¡no te olvides de la excepción NullPointerException! Esta excepción puede causar muchos problemas en tu programa.

También existen métodos alternativos equivalentes para los métodos addFirst(), addLast(), removeFirst(), y removeLast(). No nos detendremos en ellos durante mucho tiempo, ya que usted ya entiende el principio de cómo funcionan estos métodos, pero aquí está la lista:

Métodos alternativos

Métodos para añadir un elemento al principio del deque:

  • offerFirst(E e): Añade un elemento al principio del deque, si es posible, y devuelve true. Si no es posible, devuelve false.
  • offerFirst(E e): Añade un elemento al final del deque, si es posible, y devuelve true. Devuelve false si la suma no es posible.
  • empujar(E e): Añade un elemento al principio del deque, de forma similar a addFirst(). Ten en cuenta que push()es también un método de pila en la claseDeque`.

Métodos para eliminar un elemento del principio del deque:

  • pollFirst(): Elimina y devuelve el primer elemento del deque. Devuelve null si el deque está vacío.
  • pollFirst(): Elimina y devuelve el último elemento del deque. Devuelve null si el deque está vacío.
  • pop(): Elimina y devuelve el primer elemento del deque, similar a removeFirst()`.

Hemos cubierto los métodos principales. Usar Queue o Deque depende de ti.

La elección depende de las necesidades del programa. Siempre se puede resolver todo con un array regular, pero sería todo un reto, y no creo que estuviera optimizado. Por eso se han creado tantas estructuras de datos diferentes, sólo para facilitar la escritura de distintos programas.

En el próximo capítulo, pondremos en práctica las colas, y verás lo conveniente que es trabajar con ellas en el contexto adecuado.

1. Pregunta: ¿Qué significa "Deque"?
2. ¿Qué interfaz de Java representa un Deque?
3. ¿Cuál es el propósito del método `addFirst()` en un Deque?
4. ¿Qué método se utiliza para recuperar, pero no eliminar, el último elemento de un Deque?

Pregunta: ¿Qué significa "Deque"?

Selecciona la respuesta correcta

¿Qué interfaz de Java representa un Deque?

Selecciona la respuesta correcta

¿Cuál es el propósito del método addFirst() en un Deque?

Selecciona la respuesta correcta

¿Qué método se utiliza para recuperar, pero no eliminar, el último elemento de un Deque?

Selecciona la respuesta correcta

¿Todo estuvo claro?

Sección 2. Capítulo 2
course content

Contenido del Curso

Java Data Structures

Cola con doble extremoCola con doble extremo

Cola doble

Este capítulo no será muy largo; ampliará el anterior. Deque, o cola de doble extremo, ayuda a trabajar con colas tanto por delante como por detrás.

The Deque interface extends the Queue interface and represents a double-ended queue, where elements can be added and retrieved from both the front and the back.

La interfaz Deque extiende la interfaz Queue, por lo que una clase como LinkedList también implementa esta interfaz (me sorprende lo versátil que es LinkedList). Por lo tanto, usaremos de nuevo LinkedList, pero esta vez con una nueva interfaz.

Declarar un objeto con el tipo Deque no es diferente de Queue:

java

main.java

La diferencia principal entra en juego cuando pasamos a los métodos de esta interfaz. Dado que Deque es una cola de doble extremo, lo que significa que puedes trabajar con elementos tanto al principio como al final de la cola, sus métodos están adaptados a esta característica.

Métodos

Algunos métodos clave de la interfaz Deque son:

  • addFirst(elemento): Añade un elemento al principio del deque.
  • addLast(elemento): Añade un elemento al final del deque.

Evidentemente, en un deque habría métodos para añadir al principio y al final. Los nombres de estos métodos son autoexplicativos.

Veamos estos métodos en código:

java

main.java

Como puede ver, después de usar el método addFirst(), el elemento se añadió al principio del deque. Esto lo distingue del método addLast().

Deque también tiene un método regular add(), que funciona igual que el método addLast(). Por lo tanto, la elección del método a utilizar es totalmente suya.

Sigamos.

Métodos de eliminación

Si hay métodos para añadir elementos al principio y al final, también debería haber métodos para eliminar del principio y del final del deque.

  • EliminarPrimero()`: Elimina y devuelve el elemento del principio del deque.
  • EliminarÚltimo()`: Elimina y devuelve el elemento del final del deque.

Los métodos addFirst() y addLast() realizan la eliminación de elementos del principio y del final del deque. Veamos un ejemplo de uso en el código:

java

main.java

Como puedes ver, hemos eliminado el primer y el último elemento del deque, dejando sólo el segundo elemento. Es simple y conveniente, y los nombres de los métodos hablan por sí mismos.

Nota

Para asegurarte de que tu programa y tus métodos son igualmente comprensibles, vale la pena darles nombres claros. El nombre de una variable/método/clase debe indicar lo que hace ese método. Intenta evitar nombres como "a", "var1/var2", etc. Con este enfoque a la hora de escribir código, te será mucho más fácil trabajar con tus propios métodos.

Métodos de recuperación

A continuación, pasemos a los métodos de recuperación de elementos del deque.

  • getPrimero(): Devuelve, pero no elimina, el elemento del principio del deque.
  • getLast(): Devuelve, pero no elimina, el elemento del final del deque.

Podemos acceder al primer y último elemento de una cola de doble extremo. Veamos tradicionalmente la implementación en el código:

java

main.java

Usando los métodos getFirst() y getLast(), recuperamos el primer y último elemento del deque y los asignamos a variables recién creadas.

En la interfaz Deque, también existen los métodos peekFirst() y peekLast(), que tratan el problema de lanzar una excepción. En lugar de lanzar una excepción y detener el programa, devuelven null si la cola está vacía. Veamos un ejemplo:

java

main.java

A partir de este ejemplo, se hizo evidente que es mucho mejor usar los métodos peekFirst() y peekLast() en lugar de usar los métodos getFirst() y getLast(), ya que no detendrán el programa en caso de error.

Sin embargo, ¡no te olvides de la excepción NullPointerException! Esta excepción puede causar muchos problemas en tu programa.

También existen métodos alternativos equivalentes para los métodos addFirst(), addLast(), removeFirst(), y removeLast(). No nos detendremos en ellos durante mucho tiempo, ya que usted ya entiende el principio de cómo funcionan estos métodos, pero aquí está la lista:

Métodos alternativos

Métodos para añadir un elemento al principio del deque:

  • offerFirst(E e): Añade un elemento al principio del deque, si es posible, y devuelve true. Si no es posible, devuelve false.
  • offerFirst(E e): Añade un elemento al final del deque, si es posible, y devuelve true. Devuelve false si la suma no es posible.
  • empujar(E e): Añade un elemento al principio del deque, de forma similar a addFirst(). Ten en cuenta que push()es también un método de pila en la claseDeque`.

Métodos para eliminar un elemento del principio del deque:

  • pollFirst(): Elimina y devuelve el primer elemento del deque. Devuelve null si el deque está vacío.
  • pollFirst(): Elimina y devuelve el último elemento del deque. Devuelve null si el deque está vacío.
  • pop(): Elimina y devuelve el primer elemento del deque, similar a removeFirst()`.

Hemos cubierto los métodos principales. Usar Queue o Deque depende de ti.

La elección depende de las necesidades del programa. Siempre se puede resolver todo con un array regular, pero sería todo un reto, y no creo que estuviera optimizado. Por eso se han creado tantas estructuras de datos diferentes, sólo para facilitar la escritura de distintos programas.

En el próximo capítulo, pondremos en práctica las colas, y verás lo conveniente que es trabajar con ellas en el contexto adecuado.

1. Pregunta: ¿Qué significa "Deque"?
2. ¿Qué interfaz de Java representa un Deque?
3. ¿Cuál es el propósito del método `addFirst()` en un Deque?
4. ¿Qué método se utiliza para recuperar, pero no eliminar, el último elemento de un Deque?

Pregunta: ¿Qué significa "Deque"?

Selecciona la respuesta correcta

¿Qué interfaz de Java representa un Deque?

Selecciona la respuesta correcta

¿Cuál es el propósito del método addFirst() en un Deque?

Selecciona la respuesta correcta

¿Qué método se utiliza para recuperar, pero no eliminar, el último elemento de un Deque?

Selecciona la respuesta correcta

¿Todo estuvo claro?

Sección 2. Capítulo 2
some-alt