Tässä opetusohjelmassa opitaan Java-kokoelmakehyksen PriorityQueue-luokasta esimerkkien avulla.
PriorityQueue
Luokka 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.PriorityQueue
paketti. 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ä Comparator
käyttöliittymän avulla. Opimme siitä myöhemmin tässä opetusohjelmassa.
PriorityQueuen menetelmät
PriorityQueue
Luokka antaa täytäntöönpanoa kaikkien menetelmien läsnä Queue
liitä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.Iterator
paketti. 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 Comparator
kä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 Comparator
käyttöliittymän.
Sitten ohitamme compare()
menetelmän. Menetelmä aiheuttaa nyt elementin pään olevan suurin luku.
Lisätietoja vertailijasta on Java Comparator -sivulla.