Cola de prioridad en orden inverso en Java

PriorityQueue se usa cuando se supone que los objetos se procesarán en función de la prioridad . Se sabe que una Cola sigue el algoritmo First-In-First-Out, pero a veces se necesita procesar los elementos de la cola de acuerdo con la prioridad, ahí es cuando entra en juego PriorityQueue. PriorityQueue se basa en el montón de prioridad. Los elementos de la cola de prioridad se ordenan según el ordenamiento natural o mediante un comparador proporcionado en el momento de la construcción de la cola, según el constructor que se utilice.  

Hierarchy of Priority Queue

Declaración:

public class PriorityQueue<E> extends AbstractQueue<E> implements Serializable

donde E es el tipo de elementos retenidos en esta cola

Tipos de PriorityQueue

  • Cola de máxima prioridad
  • Cola de prioridad mínima

Ejemplo de cola de prioridad predeterminada

Java

// Java program to demonstrate the
// working of default PriorityQueue
import java.util.*;
 
class PriorityQueueDemo {
 
    // Main Method
    public static void main(String args[])
    {
        // Creating empty priority queue
        PriorityQueue<Integer> pQueue
            = new PriorityQueue<Integer>();
 
        // Adding items to the pQueue using add()
        pQueue.add(10);
        pQueue.add(20);
        pQueue.add(15);
        pQueue.add(5);
 
        // Printing the top element of PriorityQueue
        System.out.println(pQueue.peek());
 
        // Printing the top element and removing it
        // from the PriorityQueue container
        System.out.println(pQueue.poll());
 
        // Printing the top element again
        System.out.println(pQueue.peek());
    }
}
Producción

5
5
10

En Java, Priority Queue, por defecto implementa min Priority Queue. Si necesitamos cambiar el orden de Priority Queue de min a max Priority Queue, entonces usamos algunos métodos de la siguiente manera: 

  • Uso de las colecciones de comparación predeterminadas.reverseOrder()
  • Uso de Comparador personalizado
  • Usando

Uso de las colecciones de comparación predeterminadas.reverseOrder()

comportamiento del paquete java.util

Java

// Java program to demonstrate the
// working of PriorityQueue in reverse order
import java.util.*;
 
class PriorityQueueDemo {
 
    // Main Method
    public static void main(String args[])
    {
        // Creating empty priority queue
        PriorityQueue<Integer> pQueue
            = new PriorityQueue<Integer>(
                Collections.reverseOrder());
 
        // Adding items to the pQueue using add()
        pQueue.add(10);
        pQueue.add(20);
        pQueue.add(15);
        pQueue.add(5);
 
        // Printing the top element of PriorityQueue
        System.out.println(pQueue.peek());
 
        // Printing the top element and removing it
        // from the PriorityQueue container
        System.out.println(pQueue.poll());
 
        // Printing the top element again
        System.out.println(pQueue.peek());
    }
}
Producción

20
20
15

Método 2: usar un comparador personalizado

a

Java

// Java program to demonstrate the
// working of PriorityQueue in reverse order
 
import java.util.*;
 
public class PriorityQueueDemo {
   
    // Main Method
    public static void main(String[] args)
    {
        // Creating empty priority queue
        // with custom Comparator
        PriorityQueue<Integer> pQueue
            = new PriorityQueue<Integer>(
                new Comparator<Integer>() {
                   
                    // Compare method for place element in
                    // reverse order
                    public int compare(Integer a, Integer b)
                    {
                        if (a < b)
                            return 1;
                        if (a > b)
                            return -1;
                        return 0;
                    }
                });
 
        // Adding items to the pQueue using add()
        pQueue.add(10);
        pQueue.add(15);
        pQueue.add(20);
        pQueue.add(5);
 
        // Printing the top element of PriorityQueue
        System.out.println(pQueue.peek());
 
        // Printing the top element and removing it
        // from the PriorityQueue container
        System.out.println(pQueue.poll());
 
        // Printing the top element again
        System.out.println(pQueue.peek());
    }
}
Producción

20
20
15

Método 3: Usar

Java

// Java program to demonstrate the
// working of PriorityQueue in reverse order
import java.util.*;
 
class PriorityQueueDemo {
 
    // Main Method
    public static void main(String args[])
    {
        // Creating empty priority queue
        PriorityQueue<Integer> pQueue
            = new PriorityQueue<Integer>((a, b) -> b - a);
 
        // Adding items to the pQueue using add()
        pQueue.add(10);
        pQueue.add(20);
        pQueue.add(15);
        pQueue.add(5);
 
        // Printing the top element of PriorityQueue
        System.out.println(pQueue.peek());
 
        // Printing the top element and removing it
        // from the PriorityQueue container
        System.out.println(pQueue.poll());
 
        // Printing the top element again
        System.out.println(pQueue.peek());
    }
}
Producción

20
20
15

Publicación traducida automáticamente

Artículo escrito por Rajput-Ji y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *