Dalam tutorial ini, kita akan belajar tentang kelas PriorityQueue dari kerangka koleksi Java dengan bantuan contoh.
The PriorityQueue
kelas menyediakan fungsionalitas dari struktur data tumpukan.
Ini mengimplementasikan antarmuka Antrian.
Tidak seperti antrian normal, elemen antrian prioritas diambil dalam urutan yang diurutkan.
Misalkan, kami ingin mengambil elemen dalam urutan menaik. Dalam hal ini, kepala antrian prioritas akan menjadi elemen terkecil. Setelah elemen ini diambil, elemen terkecil berikutnya akan menjadi kepala antrian.
Penting untuk diperhatikan bahwa elemen antrian prioritas mungkin tidak diurutkan. Namun, elemen selalu diambil dalam urutan yang diurutkan.
Membuat PriorityQueue
Untuk membuat antrian prioritas, kita harus mengimpor java.util.PriorityQueue
paket. Setelah kami mengimpor paket, berikut adalah cara membuat antrian prioritas di Java.
PriorityQueue numbers = new PriorityQueue();
Di sini, kami telah membuat antrian prioritas tanpa argumen apa pun. Dalam hal ini, kepala antrian prioritas adalah elemen terkecil dari antrian. Dan elemen dihapus dalam urutan menaik dari antrian.
Namun, kami dapat menyesuaikan urutan elemen dengan bantuan Comparator
antarmuka. Kita akan mempelajarinya nanti di tutorial ini.
Metode Antrian Prioritas
The PriorityQueue
kelas menyediakan implementasi dari semua metode hadir dalam Queue
antarmuka.
Sisipkan Elemen ke PriorityQueue
add()
- Menyisipkan elemen yang ditentukan ke antrian. Jika antrian penuh, itu membuat pengecualian.offer()
- Menyisipkan elemen yang ditentukan ke antrian. Jika antrian penuh, itu kembalifalse
.
Sebagai contoh,
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); ) )
Keluaran
PriorityQueue: (2, 4) Update PriorityQueue: (1, 4, 2)
Di sini, kami telah membuat antrian prioritas bernama angka. Kami telah memasukkan 4 dan 2 ke antrian.
Meskipun 4 disisipkan sebelum 2, kepala antrian adalah 2. Hal ini karena kepala antrian prioritas adalah elemen terkecil dari antrian.
Kami kemudian memasukkan 1 ke antrian. Antrian sekarang diatur ulang untuk menyimpan elemen terkecil 1 ke kepala antrian.
Akses Elemen Antrian Prioritas
Untuk mengakses elemen dari antrian prioritas, kita dapat menggunakan peek()
metode ini. Metode ini mengembalikan kepala antrian. Sebagai contoh,
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); ) )
Keluaran
Prioritas Queue: (1, 4, 2) Accessed Element: 1
Hapus Elemen PriorityQueue
remove()
- menghapus elemen tertentu dari antrianpoll()
- mengembalikan dan menghapus kepala antrian
Sebagai contoh,
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); ) )
Keluaran
Prioritas Pertanyaan: (1, 4, 2) Apakah elemen 2 dihilangkan? true Removed Element Menggunakan poll (): 1
Mengulangi Antrean Prioritas
Untuk mengulangi elemen antrian prioritas, kita dapat menggunakan iterator()
metode ini. Untuk menggunakan metode ini, kita harus mengimpor java.util.Iterator
paketnya. Sebagai contoh,
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(", "); ) ) )
Keluaran
PriorityQueue menggunakan iterator (): 1, 4, 2,
Metode Prioritas Lainnya
Metode | Deskripsi |
---|---|
contains(element) | Mencari antrian prioritas untuk elemen yang ditentukan. Jika elemen ditemukan, ia kembali true , jika tidak ia kembali false . |
size() | Menampilkan panjang antrian prioritas. |
toArray() | Mengonversi antrean prioritas menjadi larik dan mengembalikannya. |
Pembanding Antrian Prioritas
Dalam semua contoh di atas, elemen antrian prioritas diambil dalam urutan alami (urutan naik). Namun, kami dapat menyesuaikan pemesanan ini.
Untuk ini, kita perlu membuat kelas pembanding kita sendiri yang mengimplementasikan Comparator
antarmuka. Sebagai contoh,
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; ) ) )
Keluaran
Prioritas Antrean: (4, 3, 1, 2)
Dalam contoh di atas, kami telah membuat antrian prioritas yang meneruskan kelas CustomComparator sebagai argumen.
Kelas CustomComparator mengimplementasikan Comparator
antarmuka.
Kami kemudian mengganti compare()
metode tersebut. Metode sekarang menyebabkan kepala elemen menjadi angka terbesar.
Untuk mempelajari lebih lanjut tentang komparator, kunjungi Java Comparator.