Kelas PriorityQueue Java: Panduan untuk Pemula

Pengenalan

Halo, pemrogram Java masa depan! Hari ini, kita akan menyelam ke dunia yang menarik PriorityQueue di Java. Jangan khawatir jika anda belum pernah mendengarnya sebelum ini – kita akan memulai dari awal dan bergerak ke atas bersama-sama. Pada dasarnya, PriorityQueue adalah jenis khusus untuk rak (atau antrian) di mana orang atau item yang paling penting akan selalu mendapat tempat pertama. Menarik, kan? Mari kita mulai!

Java - PriorityQueue

Pengisytiharan Kelas

Di Java, kelas PriorityQueue adalah sebahagian dari Kerangka Koleksi Java. Ia seperti senarai VIP untuk data anda! Ini adalah cara untuk mengisytiharkannya:

import java.util.PriorityQueue;

PriorityQueue<ElementType> pq = new PriorityQueue<>();

Ganti ElementType dengan jenis data yang anda ingin simpan, seperti Integer, String, atau bahkan objek kustom anda sendiri (tetapi kita akan sampai ke situ nanti).

Parameter

Apabila membuat PriorityQueue, anda boleh menentukan beberapa parameter opsional:

  1. Kapasiti awal: Berapa banyak item yang boleh ditahan secara awal.
  2. Comparator: Objek khas yang menentukan urutan elemen.

Berikut adalah contoh:

PriorityQueue<Integer> pq = new PriorityQueue<>(10, Collections.reverseOrder());

Ini mencipta PriorityQueue yang secara awal boleh menahan 10 integer, dan mereka akan diurutkan dari tertinggi ke terendah.

Konstruktor Kelas

PriorityQueue datang dengan beberapa konstruktor. Pada dasarnya, konstruktor adalah resep yang berbeda untuk membuat antrian anda. Berikut adalah yang utama:

Konstruktor Keterangan
PriorityQueue() Mencipta antrian kosong dengan kapasiti awal default (11)
PriorityQueue(int initialCapacity) Mencipta antrian kosong dengan kapasiti awal yang ditentukan
PriorityQueue(Comparator<? super E> comparator) Mencipta antrian kosong dengan comparator yang ditentukan
PriorityQueue(Collection<? extends E> c) Mencipta antrian yang mengandungi elemen dalam koleksi yang ditentukan

Lihat contoh ini:

PriorityQueue<String> fruitQueue = new PriorityQueue<>();
PriorityQueue<Integer> numberQueue = new PriorityQueue<>(20);

Pada baris pertama, kita membuat antrian untuk strings (mungkin nama buah?). Pada baris kedua, kita membuat antrian untuk angka yang secara awal boleh menahan 20 item.

Metod Kelas

Sekarang, mari kita lihat beberapa hal yang menarik yang anda boleh lakukan dengan PriorityQueue:

Metod Keterangan
add(E e) Menambahkan elemen ke antrian
offer(E e) Menambahkan elemen ke antrian (kembali 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() Kembali jumlah elemen di antrian
clear() Menghapus semua elemen dari antrian

Lihat contoh ini:

PriorityQueue<String> animalQueue = new PriorityQueue<>();

animalQueue.add("Dog");
animalQueue.offer("Cat");
animalQueue.add("Elephant");

System.out.println("Peek: " + animalQueue.peek()); // Cetak: Peek: Cat
System.out.println("Poll: " + animalQueue.poll()); // Cetak: Poll: Cat
System.out.println("Size: " + animalQueue.size()); // Cetak: Size: 2

Perhatikan bahwa "Cat" muncul pertama? Itu karena PriorityQueue mengurutkan strings secara alpabhetik secara default.

Metod Yang Dikendalikan

PriorityQueue juga mengikuti metode dari kelas induknya. Ia seperti mendapat fitur bonus! Beberapa yang berguna termasuk:

  • contains(Object o): Memeriksa jika antrian mengandungi elemen yang ditentukan
  • toArray(): Kembali array yang mengandungi semua elemen di antrian
  • iterator(): Kembali penggunaan atas elemen di antrian

Lihat contoh cepat ini:

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("First element: " + array[0]); // Cetak: First element: 2

Contoh Menambahkan Item ke Antrian Prioritas

Mari kita gabungkan semua dengan contoh yang menarik. Bayangkan kita sedang mengorganisir pesta, dan kita ingin menyambut tetamu kita dalam urutan 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 menghasilkan output:

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 mencipta kelas Guest kustom dan memberitahu Java cara membandingkan tetamu berdasarkan waktu kedatangan mereka. PriorityQueue kemudian secara otomatis mengurutkan tetamu kita untuk kita!

Dan itu tadi! Anda baru saja mengambil langkah pertama Anda ke 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 tetamu pesta anda berikutnya!

Credits: Image by storyset