Breaking

Post Top Ad

Your Ad Spot

sábado, 21 de diciembre de 2019

Java PriorityQueue

En este tutorial, aprenderemos sobre la clase PriorityQueue del marco de colecciones de Java con la ayuda de ejemplos.
anuncios a través de carbonoDataStax Luna: soporte flexible y económico para Apache Cassandra ™ de código abierto.ANUNCIOS A TRAVÉS DE CARBONO
La PriorityQueueclase proporciona la funcionalidad de la estructura de datos del montón .
Implementa la interfaz de cola .
La clase Java PriorityQueue implementa la interfaz de cola.
A diferencia de las colas normales, los elementos de cola prioritarios se recuperan en orden ordenado.
Supongamos que queremos recuperar elementos en orden ascendente. En este caso, el encabezado de la cola de prioridad será el elemento más pequeño. Una vez que se recupera este elemento, el siguiente elemento más pequeño será la cabeza de la cola.
Es importante tener en cuenta que los elementos de una cola prioritaria no se pueden ordenar. Sin embargo, los elementos siempre se recuperan en orden ordenado.

Crear PriorityQueue

Para crear una cola prioritaria, debemos importar el java.util.PriorityQueuepaquete. Una vez que importamos el paquete, así es como podemos crear una cola prioritaria en Java.
  1. PriorityQueue<Integer> numbers = new PriorityQueue<>();
Aquí, hemos creado una cola prioritaria sin ningún argumento. En este caso, el encabezado de la cola de prioridad es el elemento más pequeño de la cola. Y los elementos se eliminan en orden ascendente de la cola.
Sin embargo, podemos personalizar el orden de los elementos con la ayuda de la Comparatorinterfaz. Aprenderemos sobre eso más adelante en este tutorial.

Métodos de PriorityQueue

La PriorityQueueclase proporciona la implementación de todos los métodos presentes en la Queueinterfaz.

Insertar elementos en PriorityQueue

  • add()- Inserta el elemento especificado en la cola. Si la cola está llena, arroja una excepción.
  • offer()- Inserta el elemento especificado en la cola. Si la cola está llena, vuelve false.
Por ejemplo,
  1. import java.util.PriorityQueue;
  2. class Main {
  3. public static void main(String[] args) {
  4. // Creating a priority queue
  5. PriorityQueue<Integer> numbers = new PriorityQueue<>();
  6. // Using the add() method
  7. numbers.add(4);
  8. numbers.add(2);
  9. System.out.println("PriorityQueue: " + numbers);
  10. // Using the offer() method
  11. numbers.offer(1);
  12. System.out.println("Updated PriorityQueue: " + numbers);
  13. }
  14. }
Salida
PriorityQueue: [2, 4]
PriorityQueue actualizado: [1, 4, 2]
Aquí, hemos creado una cola prioritaria llamada números . Hemos insertado 4 y 2 en la cola.
Aunque se inserta 4 antes que 2, el encabezado de la cola es 2. Esto se debe a que el encabezado de la cola de prioridad es el elemento más pequeño de la cola.
Luego hemos insertado 1 en la cola. La cola ahora se reorganiza para almacenar el elemento más pequeño 1 en la cabecera de la cola.

Elementos de PriorityQueue de acceso

Para acceder a elementos de una cola prioritaria, podemos usar el peek()método Este método devuelve el encabezado de la cola. Por ejemplo,
  1. import java.util.PriorityQueue;
  2. class Main {
  3. public static void main(String[] args) {
  4. // Creating a priority queue
  5. PriorityQueue<Integer> numbers = new PriorityQueue<>();
  6. numbers.add(4);
  7. numbers.add(2);
  8. numbers.add(1);
  9. System.out.println("PriorityQueue: " + numbers);
  10. // Using the peek() method
  11. int number = numbers.peek();
  12. System.out.println("Accessed Element: " + number);
  13. }
  14. }
Salida
PriorityQueue: [1, 4, 2]
Elemento al que se accede: 1

Eliminar elementos de PriorityQueue

  • remove() - elimina el elemento especificado de la cola
  • poll() - regresa y elimina la cabeza de la cola
Por ejemplo,
  1. import java.util.PriorityQueue;
  2. class Main {
  3. public static void main(String[] args) {
  4. // Creating a priority queue
  5. PriorityQueue<Integer> numbers = new PriorityQueue<>();
  6. numbers.add(4);
  7. numbers.add(2);
  8. numbers.add(1);
  9. System.out.println("PriorityQueue: " + numbers);
  10. // Using the remove() method
  11. boolean result = numbers.remove(2);
  12. System.out.println("Is the element 2 removed? " + result);
  13. // Using the poll() method
  14. int number = numbers.poll();
  15. System.out.println("Removed Element Using poll(): " + number);
  16. }
  17. }
Salida
PriorityQueue: [1, 4, 2]
¿Se ha eliminado el elemento 2? Cierto
Elemento eliminado utilizando poll (): 1

Iterando sobre una prioridad

Para iterar sobre los elementos de una cola prioritaria, podemos usar el iterator()método. Para utilizar este método, debemos importar el java.util.Iteratorpaquete. Por ejemplo,
  1. import java.util.PriorityQueue;
  2. import java.util.Iterator;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Creating a priority queue
  6. PriorityQueue<Integer> numbers = new PriorityQueue<>();
  7. numbers.add(4);
  8. numbers.add(2);
  9. numbers.add(1);
  10. System.out.print("PriorityQueue using iterator(): ");
  11. //Using the iterator() method
  12. Iterator<Integer> iterate = numbers.iterator();
  13. while(iterate.hasNext()) {
  14. System.out.print(iterate.next());
  15. System.out.print(", ");
  16. }
  17. }
  18. }
Salida
PriorityQueue usando iterator (): 1, 4, 2,

Otros métodos PriorityQueue

MétodosDescripciones
contains(element)Busca en la cola de prioridad el elemento especificado. Si se encuentra el elemento, regresa true, si no regresa false.
size()Devuelve la longitud de la cola de prioridad.
toArray()Convierte una cola prioritaria en una matriz y la devuelve.

Comparador PriorityQueue

En todos los ejemplos anteriores, los elementos de la cola de prioridad se recuperan en el orden natural (orden ascendente). Sin embargo, podemos personalizar este pedido.
Para esto, necesitamos crear nuestra propia clase de comparación que implemente la Comparatorinterfaz. Por ejemplo,
  1. import java.util.PriorityQueue;
  2. import java.util.Comparator;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Creating a priority queue
  6. PriorityQueue<Integer> numbers = new PriorityQueue<>(new CustomComparator());
  7. numbers.add(4);
  8. numbers.add(2);
  9. numbers.add(1);
  10. numbers.add(3);
  11. System.out.print("PriorityQueue: " + numbers);
  12. }
  13. }
  14. class CustomComparator implements Comparator<Integer> {
  15. @Override
  16. public int compare(Integer number1, Integer number2) {
  17. int value = number1.compareTo(number2);
  18. // elements are sorted in reverse order
  19. if (value > 0) {
  20. return -1;
  21. }
  22. else if (value < 0) {
  23. return 1;
  24. }
  25. else {
  26. return 0;
  27. }
  28. }
  29. }
Salida
PriorityQueue: [4, 3, 1, 2]
En el ejemplo anterior, hemos creado una cola prioritaria que pasa la clase CustomComparator como argumento.
La clase CustomComparator implementa la Comparatorinterfaz.
Luego anulamos el compare()método. El método ahora hace que la cabeza del elemento sea el número más grande.
Para obtener más información sobre el comparador, visite Java Comparator .

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas