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!

Java - PriorityQueue

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:

  1. Kapasitas awal: Berapa banyak item yang dapat ditahan secara awal.
  2. 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