Dalam tutorial ini, kita akan belajar mengenai kelas PriorityQueue kerangka koleksi Java dengan bantuan contoh.
The PriorityQueue
kelas 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.PriorityQueue
pakej. 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 Comparator
antara muka. Kami akan mengetahui mengenai perkara itu kemudian dalam tutorial ini.
Kaedah PriorityQueue
The PriorityQueue
kelas menyediakan pelaksanaan semua kaedah yang terdapat di dalam Queue
antara 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 kembalifalse
.
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 barisanpoll()
- 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.Iterator
pakej. 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 Comparator
antara 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 Comparator
antara muka.
Kami kemudian menolak compare()
kaedah tersebut. Kaedahnya sekarang menyebabkan kepala elemen menjadi nombor terbesar.
Untuk mengetahui lebih lanjut mengenai pembanding, lawati Java Comparator.