Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Java PriorityQueue: Fundamentos, Operações e Ordenação Personalizada

Java PriorityQueue

Explore a classe PriorityQueue no framework de coleções do Java através de exemplos claros e orientações de melhores práticas.

A classe PriorityQueue implementa a estrutura de dados heap e satisfaz a interface Queue, oferecendo recuperação eficiente de elementos baseada em prioridade, não em ordem de inserção.

Diferente de filas padrão, os elementos são retornados em ordem classificada. Se você precisar de ordem crescente, o cabeça da fila é o menor elemento; cada remoção subsequente produz o próximo menor valor. Note que a ordenação interna não é garantida — apenas a ordem de extração é classificada.

Criando uma PriorityQueue

Comece importando java.util.PriorityQueue:

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

Esta configuração padrão usa ordem natural (crescente). Você pode personalizar a ordem fornecendo um Comparator ao construir a fila.

Principais Métodos da PriorityQueue

Todos os métodos definidos na interface Queue estão disponíveis, além de algumas operações específicas de fila.

Inserindo Elementos

Exemplo:

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 Atualizada: " + numeros);
    }
}

Saída

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

Embora 4 tenha sido adicionado antes de 2, o cabeça permanece 2 porque é o menor elemento. Adicionar 1 reordena a fila para que 1 se torne o cabeça.

Acessando Elementos

Use peek() para visualizar o cabeça sem removê-lo:

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 Acessado: " + numero);
    }
}

Saída

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

Removendo Elementos

Exemplo:

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("O elemento 2 foi removido? " + resultado);
        int numero = numeros.poll();
        System.out.println("Elemento Removido com poll(): " + numero);
    }
}

Saída

PriorityQueue: [1, 4, 2] O elemento 2 foi removido? true Elemento Removido com poll(): 1

Iterando sobre uma PriorityQueue

Itere com iterator() (requer 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(", ");
        }
    }
}

Saída

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

Métodos Adicionais

MétodoDescrição
contains(elemento)Retorna true se o elemento existe na fila.
size()Retorna o número de elementos na fila.
toArray()Converte a fila para um array.

Ordenação Personalizada com Comparator

Para inverter a ordem natural ou implementar qualquer prioridade personalizada, forneça um Comparator ao criar a fila:

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); // ordem reversa
    }
}

Saída

PriorityQueue: [4, 3, 1, 2]

O comparador personalizado garante que o cabeça seja o maior elemento. Para insights mais profundos, consulte a API Java Comparator.

Java

  1. Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
  2. Comentários em Java: Tipos, Uso e Boas Práticas
  3. Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
  4. Dominando Strings em Java: Criação, Métodos e Boas Práticas
  5. Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
  6. Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
  7. Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
  8. Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
  9. Asserções em Java: Guia Prático para Detectar Bugs e Garantir Confiabilidade do Código
  10. Entendendo o Java Vector: Uso, Recursos e Comparação com ArrayList