Java PriorityQueue: Dasar, Operasi, dan Pengurutan Kustom
Java PriorityQueue
Jelajahi kelas PriorityQueue dalam framework koleksi Java melalui contoh yang jelas dan panduan praktik terbaik.
Kelas PriorityQueue mengimplementasikan struktur data heap dan memenuhi antarmuka Queue, menawarkan pengambilan elemen yang efisien berdasarkan prioritas daripada urutan penyisipan.

Berbeda dengan queue standar, elemen dikembalikan dalam urutan terurut. Jika Anda membutuhkan urutan naik, head queue adalah elemen terkecil; setiap penghapusan berikutnya menghasilkan nilai terkecil selanjutnya. Perhatikan bahwa urutan internal tidak dijamin—hanya urutan ekstraksi yang terurut.
Membuat PriorityQueue
Mulailah dengan mengimpor java.util.PriorityQueue:
import java.util.PriorityQueue; PriorityQueue<Integer> numbers = new PriorityQueue<>();
Konfigurasi default ini menggunakan urutan alami (naik). Anda dapat menyesuaikan urutan dengan menyediakan Comparator saat membuat queue.
Metode Utama PriorityQueue
Semua metode yang didefinisikan dalam antarmuka Queue tersedia, ditambah beberapa operasi spesifik queue.
Menyisipkan Elemen
add() – Menambahkan elemen; melempar pengecualian jika queue penuh. offer() – Menambahkan elemen; mengembalikan false jika queue penuh.
Contoh:
import java.util.PriorityQueue; class Main { public static void main(String[] args) { PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); System.out.println("PriorityQueue: " + numbers); numbers.offer(1); System.out.println("Updated PriorityQueue: " + numbers); } }
Output
PriorityQueue: [2, 4] Updated PriorityQueue: [1, 4, 2]
Meski 4 ditambahkan sebelum 2, head tetap 2 karena ia elemen terkecil. Menambahkan 1 mengurutkan ulang queue sehingga 1 menjadi head.
Mengakses Elemen
Gunakan peek() untuk melihat head tanpa menghapusnya:
import java.util.PriorityQueue; class Main { public static void main(String[] args) { PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); int number = numbers.peek(); System.out.println("Accessed Element: " + number); } }
Output
PriorityQueue: [1, 4, 2] Accessed Element: 1
Menghapus Elemen
remove() – Menghapus elemen tertentu, mengembalikan true jika berhasil. poll() – Mengambil dan menghapus head queue.
Contoh:
import java.util.PriorityQueue; class Main { public static void main(String[] args) { PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); boolean result = numbers.remove(2); System.out.println("Is the element 2 removed? " + result); int number = numbers.poll(); System.out.println("Removed Element Using poll(): " + number); } }
Output
PriorityQueue: [1, 4, 2] Is the element 2 removed? true Removed Element Using poll(): 1
Melakukan Iterasi pada PriorityQueue
Lakukan iterasi dengan iterator() (memerlukan java.util.Iterator):
import java.util.PriorityQueue; import java.util.Iterator; class Main { public static void main(String[] args) { PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.print("PriorityQueue using iterator(): "); Iterator<Integer> iterate = numbers.iterator(); while (iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
Output
PriorityQueue using iterator(): 1, 4, 2,
Metode Tambahan
| Metode | Deskripsi |
contains(element) | Mengembalikan true jika elemen ada dalam queue. |
size() | Mengembalikan jumlah elemen dalam queue. |
toArray() | Mengonversi queue ke array. |
Pengurutan Kustom dengan Comparator
Untuk membalik urutan alami atau mengimplementasikan prioritas kustom apa pun, sediakan Comparator saat membuat queue:
import java.util.PriorityQueue; import java.util.Comparator; class Main { public static void main(String[] args) { PriorityQueue<Integer> 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<Integer> { @Override public int compare(Integer a, Integer b) { return b.compareTo(a); // reverse order } }
Output
PriorityQueue: [4, 3, 1, 2]
Comparator kustom memastikan head adalah elemen terbesar. Untuk wawasan lebih dalam, lihat Java Comparator API.