> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud6-estructuras-de-datos-avanzadas/estructuras-de-datos-en-java/colas.md).

# Colas

## Interface Queue\<E>

A interface Queue\<E> é unha interface deseñada para encolar elementos previo ao seu procesamento. Segue o principio FIFO (*First-In-First-Out*), aínda que existen excepcións como as colas de prioridade. Unha característica clave de `Queue` é que ofrece dous métodos para cada operación: un que lanza unha excepción se falla e outro que devolve un valor especial (`null` ou `false`).

| **Método** | **Especificación**                         | **Comportamento se falla**         |
| ---------- | ------------------------------------------ | ---------------------------------- |
| add(E e)   | Insire o elemento ao final da cola.        | Lanza excepción.                   |
| offer(E e) | Insire o elemento ao final da cola.        | Devolve `false`.                   |
| remove()   | Elimina e devolve o primeiro elemento.     | Lanza excepción (se está baleira). |
| poll()     | Elimina e devolve o primeiro elemento.     | Devolve `null` (se está baleira).  |
| element()  | Devolve o primeiro elemento sen eliminalo. | Lanza excepción (se está baleira). |
| peek()     | Devolve o primeiro elemento sen eliminalo. | Devolve `null` (se está baleira).  |

{% hint style="warning" %}
**Documentación oficial:** <https://docs.oracle.com/javase/8/docs/api/java/util/Queue.html>
{% endhint %}

## Interface Deque\<E>

A interface Deque\<E> (*Double Ended Queue*) estende a Queue e permite a inserción e eliminación de elementos en ambos os dous extremos. **Pode actuar tanto como unha cola (FIFO) como unha pila (LIFO -&#x20;*****Last-In-First-Out*****).**

Igual que no caso anterior, os método clasifícanse en dous tipos:

* Métodos que xestionan **excepción:** add, remove, element
* Métodos que xestionan **valor especial**: offer, poll, peek

Esta interface duplica os métodos en función de se operan no inicio ou no final da cola.

| **Método (Excepción)** | **Método (Valor especial)** | **Acción**                      |
| ---------------------- | --------------------------- | ------------------------------- |
| addFirst(E e)          | offerFirst(E e)             | Insire o elemento ao principio. |
| removeFirst()          | pollFirst()                 | Elimina o primeiro elemento.    |
| getFirst()             | peekFirst()                 | Consulta o primeiro elemento.   |

| **Método (Excepción)** | **Método (Valor especial)** | **Acción**                  |
| ---------------------- | --------------------------- | --------------------------- |
| addLast(E e)           | offerLast(E e)              | Insire o elemento ao final. |
| removeLast()           | pollLast()                  | Elimina o último elemento.  |
| getLast()              | peekLast()                  | Consulta o último elemento. |

{% hint style="warning" %}
**Documentación oficial:** <https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html>
{% endhint %}

## ArrayDeque\<E>

ArrayDeque é unha clase en Java que proporciona unha "cola de dobre extremo" (*Double Ended Queue*) baseada nun array dinámico Esta estrutura permite engadir ou eliminar elementos de forma extremadamente eficiente tanto pola fronte como polo final.

{% hint style="warning" %}
**Documentación Oficial:** <https://docs.oracle.com/javase/8/docs/api/java/util/ArrayDeque.html>
{% endhint %}

* **Tamaño Dinámico**: A `ArrayDeque`<i class="fa-copy">:copy:</i> pode aumentar ou reducir o seu tamaño automaticamente segundo se engadan ou eliminen elementos.
* **Non permite nulos:** A diferenza de ArrayList, ArrayDeque non permite nulos. Se se intenta a inserción lanzara NullPointerException.&#x20;

```java
        Deque<String> cola = new ArrayDeque<>();
        cola.addFirst("Primeiro");
        cola.add("Medio");
        cola.addLast("Ultimo");
        //Mostramos o do medio
        System.out.println("Primeiro:" + cola.getFirst());
        System.out.println("Ultimo:" + cola.getLast());
        //Eliminamos o primeiro e o ultimo
        cola.removeFirst();
        cola.removeLast();
        //Mostramos o elemento restante:
        System.out.println("Restante:" + cola.getFirst());
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud6-estructuras-de-datos-avanzadas/estructuras-de-datos-en-java/colas.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
