Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Java PriorityQueue: Fundamentos, Operaciones y Ordenación Personalizada

Java PriorityQueue

Explora la clase PriorityQueue en el framework de colecciones de Java a través de ejemplos claros y guía de mejores prácticas.

La clase PriorityQueue implementa la estructura de datos heap y satisface la interfaz Queue, ofreciendo recuperación eficiente de elementos basada en prioridad en lugar de orden de inserción.

Java PriorityQueue: Fundamentos, Operaciones y Ordenación Personalizada

A diferencia de las colas estándar, los elementos se devuelven en orden ordenado. Si necesitas orden ascendente, la cabeza de la cola es el elemento más pequeño; cada eliminación posterior produce el siguiente valor más pequeño. Ten en cuenta que el orden interno no está garantizado—solo el orden de extracción está ordenado.


Creando una PriorityQueue

Comienza importando java.util.PriorityQueue:

import java.util.PriorityQueue;
PriorityQueue<Integer> numeros = new PriorityQueue<>();

Esta configuración por defecto usa orden natural (ascendente). Puedes personalizar el orden suministrando un Comparator al construir la cola.


Métodos Clave de PriorityQueue

Todos los métodos definidos en la interfaz Queue están disponibles, más algunas operaciones específicas de cola.


Insertando Elementos

Ejemplo:

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> numeros = new PriorityQueue<>();
        numeros.add(4);
        numeros.add(2);
        System.out.println("PriorityQueue: " + numeros);
        numeros.offer(1);
        System.out.println("PriorityQueue Actualizada: " + numeros);
    }
}

Salida

PriorityQueue: [2, 4] PriorityQueue Actualizada: [1, 4, 2]

Aunque 4 se añadió antes que 2, la cabeza sigue siendo 2 porque es el elemento más pequeño. Al añadir 1, se reordena la cola para que 1 sea la cabeza.


Accediendo a Elementos

Usa peek() para ver la cabeza sin eliminarla:

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> numeros = new PriorityQueue<>();
        numeros.add(4);
        numeros.add(2);
        numeros.add(1);
        System.out.println("PriorityQueue: " + numeros);
        int numero = numeros.peek();
        System.out.println("Elemento Accedido: " + numero);
    }
}

Salida

PriorityQueue: [1, 4, 2] Elemento Accedido: 1

Eliminando Elementos

Ejemplo:

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> numeros = new PriorityQueue<>();
        numeros.add(4);
        numeros.add(2);
        numeros.add(1);
        System.out.println("PriorityQueue: " + numeros);
        boolean resultado = numeros.remove(2);
        System.out.println("¿Se eliminó el elemento 2? " + resultado);
        int numero = numeros.poll();
        System.out.println("Elemento Eliminado con poll(): " + numero);
    }
}

Salida

PriorityQueue: [1, 4, 2] ¿Se eliminó el elemento 2? true Elemento Eliminado con poll(): 1

Iterando sobre una PriorityQueue

Itera con iterator() (requiere java.util.Iterator):

import java.util.PriorityQueue;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> numeros = new PriorityQueue<>();
        numeros.add(4);
        numeros.add(2);
        numeros.add(1);
        System.out.print("PriorityQueue usando iterator(): ");
        Iterator<Integer> iterar = numeros.iterator();
        while (iterar.hasNext()) {
            System.out.print(iterar.next());
            System.out.print(", ");
        }
    }
}

Salida

PriorityQueue usando iterator(): 1, 4, 2,

Métodos Adicionales

MétodoDescripción
contains(elemento)Devuelve true si el elemento existe en la cola.
size()Devuelve el número de elementos en la cola.
toArray()Convierte la cola a un array.

Ordenación Personalizada con Comparator

Para invertir el orden natural o implementar cualquier prioridad personalizada, suministra un Comparator al crear la cola:

import java.util.PriorityQueue;
import java.util.Comparator;
class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> numeros = new PriorityQueue<>(new ComparadorPersonalizado());
        numeros.add(4);
        numeros.add(2);
        numeros.add(1);
        numeros.add(3);
        System.out.print("PriorityQueue: " + numeros);
    }
}
class ComparadorPersonalizado implements Comparator<Integer> {
    @Override
    public int compare(Integer a, Integer b) {
        return b.compareTo(a); // orden inverso
    }
}

Salida

PriorityQueue: [4, 3, 1, 2]

El comparador personalizado asegura que la cabeza sea el elemento más grande. Para más detalles, consulta la API Java Comparator.

Java

  1. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  2. Comentarios en Java: Tipos, Uso y Mejores Prácticas
  3. Dominar if…else en Java: Control de Flujo Explicado
  4. Dominar el Bucle for Mejorado en Java: Sintaxis, Ejemplos y Mejores Prácticas
  5. Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
  6. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  7. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  8. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  9. Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
  10. Aserciones en Java: Guía práctica para detectar bugs y asegurar fiabilidad del código
  11. Entendiendo Java Vector: Uso, Características y Comparación con ArrayList