Java PriorityQueue

Dalam tutorial ini, kita akan belajar tentang kelas PriorityQueue dari kerangka koleksi Java dengan bantuan contoh.

The PriorityQueuekelas menyediakan fungsionalitas dari struktur data tumpukan.

Ini mengimplementasikan antarmuka Antrian.

Tidak seperti antrian normal, elemen antrian prioritas diambil dalam urutan yang diurutkan.

Misalkan, kami 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 diperhatikan bahwa elemen antrian prioritas mungkin tidak diurutkan. Namun, elemen selalu diambil dalam urutan yang diurutkan.

Membuat PriorityQueue

Untuk membuat antrian prioritas, kita harus mengimpor java.util.PriorityQueuepaket. Setelah kami mengimpor paket, berikut adalah cara membuat antrian prioritas di Java.

 PriorityQueue 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, kami dapat menyesuaikan urutan elemen dengan bantuan Comparatorantarmuka. Kita akan mempelajarinya nanti di tutorial ini.

Metode Antrian Prioritas

The PriorityQueuekelas menyediakan implementasi dari semua metode hadir dalam Queueantarmuka.

Sisipkan Elemen ke PriorityQueue

  • add()- Menyisipkan elemen yang ditentukan ke antrian. Jika antrian penuh, itu membuat pengecualian.
  • offer()- Menyisipkan elemen yang ditentukan ke antrian. Jika antrian penuh, itu kembali false.

Sebagai contoh,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue 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) Update PriorityQueue: (1, 4, 2) 

Di sini, kami telah membuat antrian prioritas bernama angka. 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 memasukkan 1 ke antrian. Antrian sekarang diatur ulang untuk menyimpan elemen terkecil 1 ke kepala antrian.

Akses Elemen Antrian Prioritas

Untuk mengakses elemen dari antrian prioritas, kita dapat menggunakan peek()metode ini. Metode ini mengembalikan kepala antrian. Sebagai contoh,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue 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

 Prioritas Queue: (1, 4, 2) Accessed Element: 1 

Hapus Elemen PriorityQueue

  • remove() - menghapus elemen tertentu dari antrian
  • poll() - mengembalikan dan menghapus kepala antrian

Sebagai contoh,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue 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

Prioritas Pertanyaan: (1, 4, 2) Apakah elemen 2 dihilangkan? true Removed Element Menggunakan poll (): 1

Mengulangi Antrean Prioritas

Untuk mengulangi elemen antrian prioritas, kita dapat menggunakan iterator()metode ini. Untuk menggunakan metode ini, kita harus mengimpor java.util.Iteratorpaketnya. Sebagai contoh,

 import java.util.PriorityQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.print("PriorityQueue using iterator(): "); //Using the iterator() method Iterator iterate = numbers.iterator(); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Keluaran

 PriorityQueue menggunakan iterator (): 1, 4, 2, 

Metode Prioritas Lainnya

Metode Deskripsi
contains(element) Mencari antrian prioritas untuk elemen yang ditentukan. Jika elemen ditemukan, ia kembali true, jika tidak ia kembali false.
size() Menampilkan panjang antrian prioritas.
toArray() Mengonversi antrean prioritas menjadi larik dan mengembalikannya.

Pembanding Antrian Prioritas

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 Comparatorantarmuka. Sebagai contoh,

 import java.util.PriorityQueue; import java.util.Comparator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue 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 ( @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

 Prioritas Antrean: (4, 3, 1, 2) 

Dalam contoh di atas, kami telah membuat antrian prioritas yang meneruskan kelas CustomComparator sebagai argumen.

Kelas CustomComparator mengimplementasikan Comparatorantarmuka.

Kami kemudian mengganti compare()metode tersebut. Metode sekarang menyebabkan kepala elemen menjadi angka terbesar.

Untuk mempelajari lebih lanjut tentang komparator, kunjungi Java Comparator.

Artikel yang menarik...