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 palaafalse.
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 jonostapoll()- 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.








