Java PriorityQueue

Tässä opetusohjelmassa opitaan Java-kokoelmakehyksen PriorityQueue-luokasta esimerkkien avulla.

PriorityQueueLuokka tarjoaa toiminnot kasan tietorakenteen.

Se toteuttaa jonon käyttöliittymän.

Toisin kuin normaalit jonot, prioriteettijonoelementit noudetaan järjestyksessä.

Oletetaan, että haluamme noutaa elementit nousevassa järjestyksessä. Tällöin prioriteettijonon pää on pienin elementti. Kun tämä elementti on haettu, seuraava pienin elementti on jonon pää.

On tärkeää huomata, että prioriteettijonon elementtejä ei välttämättä lajitella. Elementit haetaan kuitenkin aina järjestyksessä.

Luodaan PriorityQueue

Ensisijaisen jonon luomiseksi meidän on tuotava java.util.PriorityQueuepaketti. Kun tuot paketin, voimme näin luoda prioriteettijonon Java-tiedostoon.

 PriorityQueue numbers = new PriorityQueue(); 

Tässä olemme luoneet prioriteettijonon ilman argumentteja. Tässä tapauksessa prioriteettijonon pää on jonon pienin osa. Ja elementit poistetaan nousevassa järjestyksessä jonosta.

Voimme kuitenkin mukauttaa elementtien järjestystä Comparatorkäyttöliittymän avulla. Opimme siitä myöhemmin tässä opetusohjelmassa.

PriorityQueuen menetelmät

PriorityQueueLuokka antaa täytäntöönpanoa kaikkien menetelmien läsnä Queueliitäntä.

Lisää elementit PriorityQueueen

  • add()- Lisää määritetty elementti jonoon. Jos jono on täynnä, se aiheuttaa poikkeuksen.
  • offer()- Lisää määritetty elementti jonoon. Jos jono on täynnä, se palaa false.

Esimerkiksi,

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

Tuotos

 PriorityQueue: (2, 4) Päivitetty PriorityQueue: (1, 4, 2) 

Tässä olemme luoneet prioriteettijonon nimeltä numerot. Olemme lisänneet jonoon 4 ja 2.

Vaikka 4 lisätään ennen numeroa 2, jonon pää on 2. Se johtuu siitä, että prioriteettijonon pää on jonon pienin osa.

Olemme sitten lisänneet jonoon yhden. Jono on nyt järjestetty uudelleen pienimmän elementin 1 tallentamiseksi jonon päähän.

Käytä PriorityQueue-elementtejä

Pääset elementteihin prioriteettijonosta käyttämällä peek()menetelmää. Tämä menetelmä palauttaa jonon pään. Esimerkiksi,

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

Tuotos

 PriorityQueue: (1, 4, 2) Käytetty elementti: 1 

Poista PriorityQueue Elements

  • remove() - poistaa määritetyn elementin jonosta
  • poll() - palaa ja poistaa jonon pään

Esimerkiksi,

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

Tuotos

PriorityQueue: (1, 4, 2) Onko elementti 2 poistettu? true Poistettu elementti kyselyn () avulla: 1

Toistuu prioriteettijonon yli

Toistaaksesi prioriteettijonon elementit voimme käyttää iterator()menetelmää. Tämän menetelmän käyttämiseksi meidän on tuotava java.util.Iteratorpaketti. Esimerkiksi,

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

Tuotos

 PriorityQueue iteraattorin () avulla: 1, 4, 2, 

Muut PriorityQueue-menetelmät

Menetelmät Kuvaukset
contains(element) Hakee määritetyn elementin prioriteettijonon. Jos elementti löytyy, se palaa true, jos ei, se palaa false.
size() Palauttaa prioriteettijonon pituuden.
toArray() Muuntaa prioriteettijonon matriisiksi ja palauttaa sen.

PriorityQueue Comparator

Kaikissa yllä olevissa esimerkeissä prioriteettijonoelementit haetaan luonnollisessa järjestyksessä (nousevassa järjestyksessä). Voimme kuitenkin mukauttaa tämän tilauksen.

Tätä varten meidän on luotava oma vertailuluokka, joka toteuttaa Comparatorkäyttöliittymän. Esimerkiksi,

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

Tuotos

 PriorityQueue: (4, 3, 1, 2) 

Edellä olevassa esimerkissä olemme luoneet prioriteettijonon, joka kulkee CustomComparator-luokan argumenttina.

CustomComparator-luokka toteuttaa Comparatorkäyttöliittymän.

Sitten ohitamme compare()menetelmän. Menetelmä aiheuttaa nyt elementin pään olevan suurin luku.

Lisätietoja vertailijasta on Java Comparator -sivulla.

Mielenkiintoisia artikkeleita...