English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, vamos aprender comexemplosaclassePriorityQueuedoJavaCollectionFramework.
AclassePriorityQueuefornecefuncionalidadesdedatagramaheap.
ElaimplementaInterfaceQueue。
Diferente da fila comum, os elementos da fila de prioridade são pesquisadosnaordemdeordenamento.
Suponhamosquequeremospesquisargruposdeformaordenadaascendente. Neste caso, a cabeça da fila de prioridadeéoelemento mais pequeno. Após a pesquisa deste elemento, o próximo elemento mais pequeno tornar-se-á a cabeça da fila.
ÉimportanteNotarqueosElementosdaFilaPrioritárianãopodemestaremordenados. Entretanto, os elementos são sempre pesquisadosnaordemdeordenamento.
为了创建优先级队列,我们必须导入java.util.PriorityQueue包。导入程序包后,可以使用以下方法在Java中创建优先级队列。
PriorityQueue<Integer> numbers = new PriorityQueue<>();
Para criar uma fila de prioridade,我们必须 importar o pacote java.util.PriorityQueue. Após a importação do pacote, podemos usar os seguintes métodos para criar uma fila de prioridade no Java.
Aqui, criamos uma fila de prioridade sem parâmetros. Neste caso, a cabeça da fila de prioridade é o menor elemento da fila. Os elementos serão removidos da fila em ordem crescente.
Métodos da PriorityQueue
Inserir elemento na PriorityQueue - add()
Inserir o elemento especificado na fila. Se a fila estiver cheia, será lançada uma exceção. - offer()
Por exemplo,
import java.util.PriorityQueue; class Main { public static void main(String[] args) { //Criando uma fila de prioridade PriorityQueue<Integer> numbers = new PriorityQueue<>(); //Inserir o elemento especificado na fila. Se a fila estiver cheia, retornará false. numbers.add(4); numbers.add(2); System.out.println("PriorityQueue: "} + numbers);}} //Usando o método add() Usando o método offer()1); numbers.offer( + numbers);}} } }
Resultado da Saída
PriorityQueue: [2, 4] System.out.println("PriorityQueue atualizada: "}1, 4, 2]
PriorityQueue atualizada: [4E aqui, criamos uma fila de prioridade chamada numbers. Já inserimos2inserir na fila.
Embora4foi inserido em2Antes, mas a cabeça da fila era2. Isso é porque a cabeça da fila de prioridade é o menor elemento da fila.
Depois de que1Agora, reordenamos a fila para que o menor elemento1Armazenar no início da fila.
Para acessar elementos da fila de prioridade, podemos usar o método peek(). Este método retorna a cabeça da fila. Por exemplo,
import java.util.PriorityQueue; class Main { public static void main(String[] args) { // Criar fila de prioridade PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: "} + numbers);}} //Usando o método peek() int number = numbers.peek(); System.out.println("Acessar elemento: "} + number); } }
Resultado da Saída
PriorityQueue: [1, 4, 2] Acessar elemento: 1
remove() - Excluir o elemento especificado da fila
poll() - Retornar e excluir o início da fila
Por exemplo,
import java.util.PriorityQueue; class Main { public static void main(String[] args) { // Criando uma fila de prioridade PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: "} + numbers);}} //Usando o método remove() boolean result = numbers.remove(2); System.out.println("Elemento2Já foi excluído? "} + result); //Usando o método poll() int number = numbers.poll(); System.out.println("Usando poll() para excluir o elemento: "} + number); } }
Resultado da Saída
PriorityQueue: [1, 4, 2] Elemento2Já foi removido? true Elemento removido usando poll(): 1
Para percorrer os elementos da fila de prioridade, podemos usar o método iterator(). Para usar esse método, devemos importar o pacote java.util.Iterator. Por exemplo,
import java.util.PriorityQueue; import java.util.Iterator; class Main { public static void main(String[] args) { //Criar fila de prioridade PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.print("Use iterator() para percorrer a PriorityQueue: "); //Use o método iterator() Iterator<Integer> iterate = numbers.iterator(); while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
Resultado da Saída
Use iterator() para percorrer a PriorityQueue: 1, 4, 2,
Método | Descrição do conteúdo |
---|---|
contains(element) | Procure o elemento especificado na fila de prioridade. Se encontrar o elemento, retorne true, caso contrário, retorne false. |
size() | Retorna o tamanho da fila de prioridade. |
toArray() | Converta a fila de prioridade em um array e retorne-o. |
Em todos os exemplos acima, os elementos da fila de prioridade são recuperados em ordem natural (crescente). Mas, podemos personalizar essa ordem.
Para isso, precisamos criar nossa classe comparator, que implementa a interface Comparator. Por exemplo
import java.util.PriorityQueue; import java.util.Comparator; class Main { public static void main(String[] args) { //Criar fila de prioridade PriorityQueue<Integer> 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<Integer> { @Override public int compare(Integer number1, Integer number2) { int value = number1.compareTo(number2); //Os elementos são ordenados em ordem inversa if (value > 0) { return -1; } else if (value < 0) { return 1; } else { return 0; } } }
Resultado da Saída
PriorityQueue: [4, 3, 1, 2]
No exemplo acima, criamos uma fila de prioridade, passando a classe CustomComparator como parâmetro.
A classe CustomComparator implementa a interface Comparator.
Em seguida, nós sobrescrevemos o método compare(). Este método agora faz com que a cabeça do elemento seja o maior número.