Kelas PriorityQueue di Java: Panduan bagi Pemula
Pengenalan
Halo, pemrogram Java masa depan! Hari ini, kita akan memasuki dunia yang menarik PriorityQueue di Java. Jangan khawatir jika Anda belum pernah mendengar tentang hal itu sebelumnya - kita akan memulai dari awal dan bergerak maju bersama. Pahami PriorityQueue sebagai jenis khusus antrian (atau queue) di mana orang atau item yang paling penting selalu mendapat kesempatan untuk mendahului. Menarik, kan? Mari kita mulai!
Deklarasi Kelas
Di Java, kelas PriorityQueue adalah bagian dari Kerangka Kerja Koleksi Java. Itu seperti daftar VIP untuk data Anda! Berikut ini adalah cara Anda mendeklarasikannya:
import java.util.PriorityQueue;
PriorityQueue<ElementType> pq = new PriorityQueue<>();
Ganti ElementType
dengan jenis data yang Anda ingin simpan, seperti Integer, String, atau bahkan objek khusus Anda sendiri (tapi kita akan membahas hal itu nanti).
Parameter
Saat membuat PriorityQueue, Anda dapat menentukan beberapa parameter opsional:
- Kapasitas awal: Berapa banyak item yang dapat ditahan secara awal.
- Comparator: Objek khusus yang menentukan urutan elemen.
Berikut adalah contohnya:
PriorityQueue<Integer> pq = new PriorityQueue<>(10, Collections.reverseOrder());
Ini membuat PriorityQueue yang dapat secara awal menahan 10 bilangan bulat, dan mereka akan diurutkan dari terbesar ke terkecil.
Konstruktor Kelas
PriorityQueue datang dengan beberapa konstruktor. Pahami konstruktor sebagai resep berbeda untuk membuat antrian Anda. Berikut adalah yang utamanya:
Konstruktor | Deskripsi |
---|---|
PriorityQueue() |
Membuat antrian kosong dengan kapasitas awal default (11) |
PriorityQueue(int initialCapacity) |
Membuat antrian kosong dengan kapasitas awal yang ditentukan |
PriorityQueue(Comparator<? super E> comparator) |
Membuat antrian kosong dengan komparator yang ditentukan |
PriorityQueue(Collection<? extends E> c) |
Membuat antrian yang berisi elemen dalam koleksi yang ditentukan |
Lihat contohnya:
PriorityQueue<String> fruitQueue = new PriorityQueue<>();
PriorityQueue<Integer> numberQueue = new PriorityQueue<>(20);
Pada baris pertama, kita membuat antrian untuk string (mungkin nama buah?). Pada baris kedua, kita membuat antrian untuk angka yang dapat secara awal menahan 20 item.
Metode Kelas
Sekarang, mari kita lihat beberapa hal yang menarik yang dapat Anda lakukan dengan PriorityQueue:
Metode | Deskripsi |
---|---|
add(E e) |
Menambahkan elemen ke antrian |
offer(E e) |
Menambahkan elemen ke antrian (mengembalikan false jika penuh) |
peek() |
Mengambil, tetapi tidak menghapus, kepala antrian |
poll() |
Mengambil dan menghapus kepala antrian |
remove(Object o) |
Menghapus satu contoh dari elemen yang ditentukan |
size() |
Mengembalikan jumlah elemen dalam antrian |
clear() |
Menghapus semua elemen dari antrian |
Lihatlah contohnya:
PriorityQueue<String> animalQueue = new PriorityQueue<>();
animalQueue.add("Anjing");
animalQueue.offer("Kucing");
animalQueue.add("Gajah");
System.out.println("Peek: " + animalQueue.peek()); // Cetak: Peek: Kucing
System.out.println("Poll: " + animalQueue.poll()); // Cetak: Poll: Kucing
System.out.println("Size: " + animalQueue.size()); // Cetak: Size: 2
Perhatikan bahwa "Kucing" muncul pertama? Itu karena PriorityQueue secara default mengurutkan string secara alfabetis.
Metode Yang Ditemukan
PriorityQueue juga mewarisi metode dari kelas induknya. Itu seperti mendapat fitur bonus! Beberapa yang berguna termasuk:
-
contains(Object o)
: Memeriksa jika antrian berisi elemen yang ditentukan -
toArray()
: Mengembalikan array yang berisi semua elemen dalam antrian -
iterator()
: Mengembalikan iterator atas elemen dalam antrian
Berikut adalah contohnya:
PriorityQueue<Integer> numberQueue = new PriorityQueue<>();
numberQueue.add(5);
numberQueue.add(2);
numberQueue.add(8);
System.out.println("Contains 2? " + numberQueue.contains(2)); // Cetak: Contains 2? true
Object[] array = numberQueue.toArray();
System.out.println("Elemen pertama: " + array[0]); // Cetak: First element: 2
Contoh Menambahkan Item ke Antrian Prioritas
Mari kita gabungkan semua itu dengan contoh yang menyenangkan. Bayangkan kita sedang mengorganisir pesta, dan kita ingin menyapa tamu kita sesuai dengan waktu kedatangan mereka:
import java.util.PriorityQueue;
public class PartyGreeter {
public static void main(String[] args) {
PriorityQueue<Guest> guestQueue = new PriorityQueue<>();
guestQueue.add(new Guest("Alice", 18.30));
guestQueue.add(new Guest("Bob", 18.15));
guestQueue.add(new Guest("Charlie", 18.45));
while (!guestQueue.isEmpty()) {
Guest guest = guestQueue.poll();
System.out.println("Selamat datang, " + guest.name + "! Anda tiba pada " + guest.arrivalTime);
}
}
static class Guest implements Comparable<Guest> {
String name;
double arrivalTime;
Guest(String name, double arrivalTime) {
this.name = name;
this.arrivalTime = arrivalTime;
}
@Override
public int compareTo(Guest other) {
return Double.compare(this.arrivalTime, other.arrivalTime);
}
}
}
Program ini akan mencetak:
Selamat datang, Bob! Anda tiba pada 18.15
Selamat datang, Alice! Anda tiba pada 18.3
Selamat datang, Charlie! Anda tiba pada 18.45
Dalam contoh ini, kita membuat kelas Guest
khusus dan memberi tahu Java cara membandingkan tamu berdasarkan waktu kedatangannya. PriorityQueue lalu secara otomatis mengurutkan tamu kita untuk kita!
Dan itu sudah! Anda baru saja mengambil langkah pertama Anda ke dalam dunia PriorityQueue di Java. Ingat, praktek membuat perfect, jadi jangan takut untuk bereksperimen dengan konsep ini. Siapa tahu? Mungkin Anda akan menggunakan PriorityQueue untuk mengorganisir daftar tamu pesta Anda berikutnya!
Credits: Image by storyset