Implementación de colas (Queue) en Java

🧩 Implementación de colas en Java

🚀 Recordemos…

Una cola (Queue) es una estructura FIFO:
> First In, First Out — el primero en entrar, es el primero en salir.

Las colas se usan cuando un recurso compartido debe atender múltiples consumidores en orden.

🖨️ Impresoras → gestionan trabajos en orden.
💻 Sistemas operativos → gestionan procesos.
🌐 Servidores → gestionan solicitudes web.
💬 Chat de soporte → atiende clientes uno por uno.

🧠 En Java…

En Java, Queue es una interfaz, no una clase.
Eso significa que no se puede instanciar directamente.

Queue<Integer> queue = new Queue<Integer>(); // ❌ Error

💬

“Las interfaces son contratos: definen qué métodos deben implementar las clases que las usan.”

🧩 Interfaz Queue

Podemos buscar su documentación oficial: 👉 Java Queue Interface — Oracle Docs

Allí encontramos que Queue declara métodos como:

Método Descripción Si falla…
add() / offer() Encolar elemento add() lanza excepción; offer() devuelve false
remove() / poll() Desencolar elemento remove() lanza excepción; poll() devuelve null
element() / peek() Ver frente de la cola element() lanza excepción; peek() devuelve null

🧱 Implementaciones comunes

La interfaz Queue tiene varias implementaciones. Las más usadas son:

  • LinkedList → basada en nodos enlazados
  • ArrayDeque → basada en un arreglo dinámico (doble extremo)

👉 Usarás estas dos el 90% de las veces.

💻 Ejemplo en Java

Veamos cómo usar una ArrayDeque como cola:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new ArrayDeque<>();

        queue.add(10);
        queue.add(20);
        queue.add(30);

        System.out.println(queue); // [10, 20, 30]
    }
}

🎬 👉 10 entra primero → está al frente. 👉 30 entra al final → está al fondo.

↩︎️ Operación de eliminación

int first = queue.remove(); 
System.out.println("Eliminado: " + first);
System.out.println("Cola actual: " + queue);

🧩 Salida:

Eliminado: 10  
Cola actual: [20, 30]

🔹 Se elimina siempre el frente. 🔹 Los nuevos elementos se agregan al final.

🎯 Resumen visual

flowchart LR
  A["Enqueue(10)"] --> B["Enqueue(20)"] --> C["Enqueue(30)"]
  subgraph Cola
  A1["Front: 10"] --> A2["20"] --> A3["Rear: 30"]
  end

🧭

  • add() → inserta al final
  • remove() → saca del frente
  • peek() → consulta sin eliminar

Queue es una interfaz (no se instancia). ✅ Usamos LinkedList o ArrayDeque como implementaciones. ✅ Sus operaciones básicas son constantes (O(1)). ✅ Ideal para modelar procesos en espera, tareas o flujos secuenciales.