Java PriorityQueue

Šajā apmācībā mēs ar piemēru palīdzību uzzināsim par Java kolekciju ietvaru PriorityQueue klasi.

PriorityQueueKlase nodrošina funkcionalitāti kaudzes datu struktūru.

Tas ievieš rindas saskarni.

Atšķirībā no parastajām rindām prioritārie rindas elementi tiek izgūti sakārtotā secībā.

Pieņemsim, ka mēs vēlamies iegūt elementus augošā secībā. Šajā gadījumā prioritārās rindas galva būs mazākais elements. Kad šis elements ir iegūts, nākamais mazākais elements būs rindas galva.

Ir svarīgi atzīmēt, ka prioritārās rindas elementus var nešķirot. Tomēr elementi vienmēr tiek izgūti sakārtotā secībā.

Izveido PriorityQueue

Lai izveidotu prioritāru rindu, mums ir jāimportē java.util.PriorityQueuepakete. Kad pakotne ir importēta, šeit mēs varam izveidot prioritāru rindu Java.

 PriorityQueue numbers = new PriorityQueue(); 

Šeit mēs esam izveidojuši prioritāru rindu bez jebkādiem argumentiem. Šajā gadījumā prioritārās rindas galva ir mazākais rindas elements. Un elementi tiek noņemti augošā secībā no rindas.

Tomēr ar Comparatorsaskarnes palīdzību mēs varam pielāgot elementu secību . Par to mēs uzzināsim vēlāk šajā apmācībā.

PriorityQueue metodes

PriorityQueueKlase nodrošina īstenošanu visas metodes, kas atrodas Queueinterfeisu.

Ievietojiet elementus PriorityQueue

  • add()- ievieto norādīto elementu rindā. Ja rinda ir pilna, tas rada izņēmumu.
  • offer()- ievieto norādīto elementu rindā. Ja rinda ir pilna, tā atgriežas false.

Piemēram,

 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); ) ) 

Rezultāts

 PriorityQueue: (2, 4) Atjaunināta PriorityQueue: (1, 4, 2) 

Šeit mēs esam izveidojuši prioritāru rindu ar numuriem. Mēs esam ievietojuši rindā 4 un 2.

Lai gan 4 ir ievietots pirms 2, rindas galva ir 2. Tas ir tāpēc, ka prioritārās rindas galva ir mazākais rindas elements.

Pēc tam mēs esam ievietojuši 1 rindā. Tagad rinda ir pārkārtota, lai vismazākais elements 1 tiktu saglabāts rindas galā.

Piekļūstiet PriorityQueue Elements

Lai piekļūtu elementiem no prioritārās rindas, mēs varam izmantot peek()metodi. Šī metode atgriež rindas galvu. Piemēram,

 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); ) ) 

Rezultāts

 PriorityQueue: (1, 4, 2) Piekļūtais elements: 1 

Noņemiet PriorityQueue elementus

  • remove() - noņem norādīto elementu no rindas
  • poll() - atgriežas un noņem rindas galvu

Piemēram,

 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); ) ) 

Rezultāts

PriorityQueue: (1, 4, 2) Vai elements 2 ir noņemts? true Noņemts elements, izmantojot aptauju (): 1

Atkārtota pār PriorityQueue

Lai atkārtotu prioritātes rindas elementus, mēs varam izmantot iterator()metodi. Lai izmantotu šo metodi, mums ir jāimportē java.util.Iteratorpakotne. Piemēram,

 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(", "); ) ) ) 

Rezultāts

 PriorityQueue, izmantojot iteratoru (): 1, 4, 2, 

Citas PriorityQueue metodes

Metodes Apraksti
contains(element) Meklē norādītā elementa prioritātes rindu. Ja elements ir atrasts, tas atgriežas true, ja nē, tas atgriežas false.
size() Atgriež prioritārās rindas garumu.
toArray() Pārvērš prioritāro rindu masīvā un atgriež to.

PriorityQueue Comparator

Visos iepriekš minētajos piemēros prioritārās rindas elementi tiek izgūti dabiskajā secībā (augošā secībā). Tomēr mēs varam pielāgot šo pasūtīšanu.

Lai to izdarītu, mums ir jāizveido sava salīdzināmā klase, kas īsteno Comparatorsaskarni. Piemēram,

 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; ) ) ) 

Rezultāts

 PriorityQueue: (4, 3, 1, 2) 

Iepriekš minētajā piemērā mēs esam izveidojuši prioritātes rindu, kas kā argumentu nodod klasi CustomComparator.

Klase CustomComparator ievieš Comparatorsaskarni.

Pēc tam mēs ignorējam compare()metodi. Metode tagad izraisa tā, ka elementa galva ir vislielākais skaitlis.

Lai uzzinātu vairāk par salīdzinātāju, apmeklējiet Java Comparator.

Interesanti raksti...