Java PriorityQueue

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

The PriorityQueuekelas menyediakan fungsi struktur data timbunan.

Ia melaksanakan antara muka Antrian.

Tidak seperti antrian biasa, elemen giliran keutamaan diambil dalam urutan yang disusun.

Katakanlah, kami ingin mengambil elemen mengikut urutan menaik. Dalam kes ini, ketua barisan keutamaan akan menjadi elemen terkecil. Setelah elemen ini diambil, elemen terkecil seterusnya akan menjadi ketua barisan.

Penting untuk diperhatikan bahawa elemen antrian keutamaan mungkin tidak disusun. Walau bagaimanapun, elemen selalu diambil mengikut urutan.

Membuat PriorityQueue

Untuk membuat barisan keutamaan, kita mesti mengimport java.util.PriorityQueuepakej. Setelah kami mengimport pakej, berikut adalah bagaimana kita dapat membuat antrian keutamaan di Java.

 PriorityQueue numbers = new PriorityQueue(); 

Di sini, kami telah membuat barisan keutamaan tanpa sebarang hujah. Dalam kes ini, kepala giliran keutamaan adalah elemen barisan terkecil. Dan elemen dikeluarkan mengikut urutan menaik dari barisan.

Walau bagaimanapun, kita dapat menyesuaikan susunan elemen dengan bantuan Comparatorantara muka. Kami akan mengetahui mengenai perkara itu kemudian dalam tutorial ini.

Kaedah PriorityQueue

The PriorityQueuekelas menyediakan pelaksanaan semua kaedah yang terdapat di dalam Queueantara muka.

Masukkan Elemen ke PriorityQueue

  • add()- Memasukkan elemen yang ditentukan ke dalam barisan. Sekiranya barisan penuh, ia akan memberikan pengecualian.
  • offer()- Memasukkan elemen yang ditentukan ke dalam barisan. Sekiranya barisan penuh, ia akan 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); ) ) 

Pengeluaran

 PriorityQueue: (2, 4) PriorityQueue yang dikemas kini: (1, 4, 2) 

Di sini, kami telah membuat barisan keutamaan bernama nombor. Kami telah memasukkan 4 dan 2 ke dalam barisan.

Walaupun 4 dimasukkan sebelum 2, kepala barisan adalah 2. Ini kerana kepala giliran keutamaan adalah elemen paling kecil dalam barisan.

Kami kemudian memasukkan 1 ke dalam barisan. Antrian kini disusun semula untuk menyimpan elemen terkecil 1 ke kepala barisan.

Akses Elemen PrioritiQueue

Untuk mengakses elemen dari barisan keutamaan, kita dapat menggunakan peek()kaedahnya. Kaedah ini mengembalikan kepala barisan. 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); ) ) 

Pengeluaran

 PriorityQueue: (1, 4, 2) Elemen Diakses: 1 

Buang Elemen PriorityQueue

  • remove() - mengeluarkan elemen yang ditentukan dari barisan
  • poll() - mengembalikan dan membuang kepala barisan

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); ) ) 

Pengeluaran

PriorityQueue: (1, 4, 2) Adakah elemen 2 dikeluarkan? benar Elemen Dihapus Menggunakan tinjauan pendapat (): 1

Berterusan Mengenai Keutamaan

Untuk mengulang elemen antrian keutamaan, kita dapat menggunakan iterator()kaedahnya. Untuk menggunakan kaedah ini, kita mesti mengimport java.util.Iteratorpakej. 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(", "); ) ) ) 

Pengeluaran

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

Kaedah Keutamaan Keutamaan Lain

Kaedah Penerangan
contains(element) Mencari barisan keutamaan untuk elemen yang ditentukan. Sekiranya unsur itu dijumpai, ia akan kembali true, jika tidak, ia akan kembali false.
size() Mengembalikan panjang barisan keutamaan.
toArray() Menukar barisan keutamaan kepada array dan mengembalikannya.

Perbandingan PriorityQueue

Dalam semua contoh di atas, elemen antrian keutamaan diambil dalam urutan semula jadi (tertib menaik). Walau bagaimanapun, kami dapat menyesuaikan pesanan ini.

Untuk ini, kita perlu membuat kelas pembanding kita sendiri yang melaksanakan Comparatorantara muka. 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; ) ) ) 

Pengeluaran

 KeutamaanQueue: (4, 3, 1, 2) 

Dalam contoh di atas, kami telah membuat barisan keutamaan yang melewati kelas CustomComparator sebagai argumen.

Kelas CustomComparator melaksanakan Comparatorantara muka.

Kami kemudian menolak compare()kaedah tersebut. Kaedahnya sekarang menyebabkan kepala elemen menjadi nombor terbesar.

Untuk mengetahui lebih lanjut mengenai pembanding, lawati Java Comparator.

Artikel menarik...