java
Dalam tutorial ini, kita akan belajar tentang kelas PriorityQueue dari framework koleksi Java dengan bantuan contoh.
PriorityQueue
class menyediakan fungsionalitas struktur data heap.
Ini mengimplementasikan antarmuka Antrian.
Tidak seperti antrian normal, elemen antrian prioritas diambil dalam urutan yang diurutkan.
Misalkan, kita 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 dicatat bahwa elemen antrian prioritas mungkin tidak diurutkan. Namun, elemen selalu diambil dalam urutan terurut.
Untuk membuat antrian prioritas, kita harus mengimpor java.util.PriorityQueue
kemasan. Setelah kita mengimpor paket, berikut adalah cara membuat antrian prioritas di Java.
PriorityQueue<Integer> 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, kita dapat menyesuaikan urutan elemen dengan bantuan Comparator
antarmuka. Kita akan mempelajarinya nanti dalam tutorial ini.
PriorityQueue
class menyediakan implementasi semua metode yang ada di Queue
antarmuka.
add()
- Menyisipkan elemen tertentu ke antrian. Jika antrian penuh, itu akan mengeluarkan pengecualian.offer()
- Menyisipkan elemen tertentu ke antrian. Jika antrian penuh, ia mengembalikan false
.Misalnya,
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
// Creating a priority queue
PriorityQueue<Integer> 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] Updated PriorityQueue: [1, 4, 2]
Di sini, kami telah membuat antrian prioritas bernama numbers . 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 telah memasukkan 1 ke antrian. Antrian sekarang diatur ulang untuk menyimpan elemen terkecil 1 ke kepala antrian.
Untuk mengakses elemen dari antrian prioritas, kita dapat menggunakan peek()
metode. Metode ini mengembalikan kepala antrian. Misalnya,
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
// Creating a priority queue
PriorityQueue<Integer> 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
PriorityQueue: [1, 4, 2] Accessed Element: 1
remove()
- menghapus elemen tertentu dari antrianpoll()
- mengembalikan dan menghapus kepala antrianMisalnya,
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
// Creating a priority queue
PriorityQueue<Integer> 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
PriorityQueue: [1, 4, 2] Is the element 2 removed? true Removed Element Using poll(): 1
Untuk mengulangi elemen antrian prioritas, kita dapat menggunakan iterator()
metode. Untuk menggunakan metode ini, kita harus mengimpor java.util.Iterator
kemasan. Misalnya,
import java.util.PriorityQueue;
import java.util.Iterator;
class Main {
public static void main(String[] args) {
// Creating a priority queue
PriorityQueue<Integer> numbers = new PriorityQueue<>();
numbers.add(4);
numbers.add(2);
numbers.add(1);
System.out.print("PriorityQueue using iterator(): ");
//Using the iterator() method
Iterator<Integer> iterate = numbers.iterator();
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
Keluaran
PriorityQueue using iterator(): 1, 4, 2,
Metode | Deskripsi |
---|---|
contains(element) | Mencari antrian prioritas untuk elemen yang ditentukan. Jika elemen ditemukan, ia mengembalikan true , jika tidak mengembalikan false . |
size() | Mengembalikan panjang antrian prioritas. |
toArray() | Mengonversi antrean prioritas menjadi larik dan mengembalikannya. |
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. Misalnya,
import java.util.PriorityQueue;
import java.util.Comparator;
class Main {
public static void main(String[] args) {
// Creating a priority queue
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 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
PriorityQueue: [4, 3, 1, 2]
Dalam contoh di atas, kami telah membuat antrian prioritas yang melewati CustomComparator kelas sebagai argumen.
CustomComparator kelas mengimplementasikan Comparator
antarmuka.
Kami kemudian menimpa compare()
metode. Metode sekarang menyebabkan kepala elemen menjadi angka terbesar.
Untuk mempelajari lebih lanjut tentang komparator, kunjungi Java Comparator.
java
Java LinkedList Dalam tutorial ini, kita akan belajar tentang Java LinkedList secara detail dengan bantuan contoh. LinkedList kelas kerangka koleksi Java menyediakan fungsionalitas struktur data daftar tertaut (daftar tertaut ganda). Setiap elemen dalam daftar tertaut dikenal sebagai simpul . In
Antrian Pemblokiran Java Dalam tutorial ini, kita akan belajar tentang antarmuka Java BlockingQueue dan metodenya. BlockingQueue antarmuka Java Collections framework memperluas Queue antarmuka. Ini memungkinkan operasi apa pun untuk menunggu hingga berhasil dilakukan. Misalnya, jika kita ingin me
Java ArrayBlockingQueue Dalam tutorial ini, kita akan belajar tentang kelas ArrayBlockingQueue dan metodenya dengan bantuan contoh. ArrayBlockingQueue class framework Java Collections menyediakan implementasi antrian pemblokiran menggunakan array. Ini mengimplementasikan antarmuka Java BlockingQu
Java LinkedBlockingQueue Dalam tutorial ini, kita akan belajar tentang kelas LinkedBLockingQueue dan metodenya dengan bantuan contoh. LinkedBlockingQueue kelas Java Collections framework menyediakan implementasi antrian pemblokiran menggunakan daftar tertaut. Ini mengimplementasikan antarmuka Jav