Java PriorityQueue

Neste tutorial, aprenderemos sobre a classe PriorityQueue da estrutura de coleções Java com a ajuda de exemplos.

A PriorityQueueclasse fornece a funcionalidade da estrutura de dados do heap.

Ele implementa a interface Queue.

Ao contrário das filas normais, os elementos da fila de prioridade são recuperados em ordem classificada.

Suponha que desejamos recuperar os elementos em ordem crescente. Nesse caso, o chefe da fila de prioridade será o menor elemento. Depois que esse elemento for recuperado, o próximo menor elemento será o primeiro da fila.

É importante observar que os elementos de uma fila de prioridade não podem ser classificados. No entanto, os elementos são sempre recuperados em ordem de classificação.

Criando PriorityQueue

Para criar uma fila prioritária, devemos importar o java.util.PriorityQueuepacote. Depois de importar o pacote, aqui está como podemos criar uma fila de prioridade em Java.

 PriorityQueue numbers = new PriorityQueue(); 

Aqui, criamos uma fila de prioridade sem nenhum argumento. Nesse caso, o chefe da fila de prioridade é o menor elemento da fila. E os elementos são removidos em ordem crescente da fila.

No entanto, podemos personalizar a ordem dos elementos com a ajuda da Comparatorinterface. Aprenderemos sobre isso mais tarde neste tutorial.

Métodos de PriorityQueue

A PriorityQueueclasse fornece a implementação de todos os métodos presentes na Queueinterface.

Inserir elementos em PriorityQueue

  • add()- Insere o elemento especificado na fila. Se a fila estiver cheia, ele lançará uma exceção.
  • offer()- Insere o elemento especificado na fila. Se a fila estiver cheia, ele retorna false.

Por exemplo,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); // Using the add() method numbers.add(4); numbers.add(2); System.out.println("PriorityQueue: " + numbers); // Using the offer() method numbers.offer(1); System.out.println("Updated PriorityQueue: " + numbers); ) ) 

Resultado

 PriorityQueue: (2, 4) PriorityQueue atualizado: (1, 4, 2) 

Aqui, criamos uma fila prioritária chamada números. Inserimos 4 e 2 na fila.

Embora 4 seja inserido antes de 2, o chefe da fila é 2. Isso ocorre porque o chefe da fila de prioridade é o menor elemento da fila.

Em seguida, inserimos 1 na fila. A fila agora é reorganizada para armazenar o menor elemento 1 no início da fila.

Elementos de acesso PriorityQueue

Para acessar elementos de uma fila de prioridade, podemos usar o peek()método. Este método retorna o topo da fila. Por exemplo,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the peek() method int number = numbers.peek(); System.out.println("Accessed Element: " + number); ) ) 

Resultado

 PriorityQueue: (1, 4, 2) Elemento acessado: 1 

Remover elementos PriorityQueue

  • remove() - remove o elemento especificado da fila
  • poll() - retorna e remove o topo da fila

Por exemplo,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the remove() method boolean result = numbers.remove(2); System.out.println("Is the element 2 removed? " + result); // Using the poll() method int number = numbers.poll(); System.out.println("Removed Element Using poll(): " + number); ) ) 

Resultado

PriorityQueue: (1, 4, 2) O elemento 2 foi removido? true Elemento removido usando enquete (): 1

Iterando em uma PriorityQueue

Para iterar sobre os elementos de uma fila prioritária, podemos usar o iterator()método. Para usar este método, devemos importar o java.util.Iteratorpacote. Por exemplo,

 import java.util.PriorityQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.print("PriorityQueue using iterator(): "); //Using the iterator() method Iterator iterate = numbers.iterator(); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Resultado

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

Outros métodos PriorityQueue

Métodos Descrições
contains(element) Pesquisa a fila de prioridade para o elemento especificado. Se o elemento for encontrado, ele retorna true, caso contrário, ele retorna false.
size() Retorna o comprimento da fila de prioridade.
toArray() Converte uma fila de prioridade em uma matriz e a retorna.

Comparador PriorityQueue

Em todos os exemplos acima, os elementos da fila de prioridade são recuperados na ordem natural (ordem crescente). No entanto, podemos personalizar esse pedido.

Para isso, precisamos criar nossa própria classe comparadora que implementa a Comparatorinterface. Por exemplo,

 import java.util.PriorityQueue; import java.util.Comparator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(new CustomComparator()); numbers.add(4); numbers.add(2); numbers.add(1); numbers.add(3); System.out.print("PriorityQueue: " + numbers); ) ) class CustomComparator implements Comparator ( @Override public int compare(Integer number1, Integer number2) ( int value = number1.compareTo(number2); // elements are sorted in reverse order if (value> 0) ( return -1; ) else if (value < 0) ( return 1; ) else ( return 0; ) ) ) 

Resultado

 PriorityQueue: (4, 3, 1, 2) 

No exemplo acima, criamos uma fila de prioridade passando a classe CustomComparator como um argumento.

A classe CustomComparator implementa a Comparatorinterface.

Em seguida, substituímos o compare()método. O método agora faz com que o cabeçalho do elemento seja o maior número.

Para saber mais sobre o comparador, visite Java Comparator.

Artigos interessantes...