Tertib Isih Tersuai dalam PriorityQueue
PriorityQueue, kelas koleksi Java, menyediakan mekanisme pengisihan lalai yang menyusun elemen dalam tertib menaik berdasarkan susunan semula jadi. Walau bagaimanapun, adalah mungkin untuk menyesuaikan gelagat pengisihan ini dan mengisih mengikut kriteria tertentu.
Mendapatkan PriorityQueue untuk Isih seperti yang Diingini
Untuk mencapai pengisihan tersuai dalam PriorityQueue, gunakan pembina beban berlebihan yang memerlukan Pembanding super E> pembanding sebagai hujah. Pembanding membandingkan elemen dan menentukan susunannya. Contohnya, untuk mengisih Rentetan berdasarkan panjangnya dalam tertib menaik:
Comparator<String> comparator = (x, y) -> x.length() - y.length(); PriorityQueue<String> queue = new PriorityQueue<>(comparator);
Tawaran lwn. Kaedah Tambah
PriorityQueue menawarkan dua kaedah untuk menambah elemen: offer( ) dan tambah(). Walaupun sama dalam fungsi, mereka mempunyai perbezaan yang ketara. offer() mengembalikan benar jika elemen berjaya ditambah dan palsu jika baris gilir penuh. Sebaliknya, add() terus menambah elemen pada baris gilir dan membuang IllegalStateException jika baris gilir penuh.
Dalam kes PriorityQueue, yang tidak terhad, kedua-dua kaedah adalah setara. Walau bagaimanapun, dalam baris gilir keutamaan bersempadan, offer() boleh digunakan untuk menyemak sama ada elemen itu boleh ditambah sebelum cuba memasukkannya.
Contoh: Pengisihan Panjang Rentetan
Pertimbangkan contoh berikut di mana anda ingin membuat PriorityQueue yang mengisih String berdasarkannya panjang:
public class StringLengthComparator implements Comparator<String> { @Override public int compare(String x, String y) { return x.length() - y.length(); } } public class PriorityTest { public static void main(String[] args) { PriorityQueue<String> queue = new PriorityQueue<>(new StringLengthComparator()); queue.offer("medium"); queue.offer("short"); queue.offer("very long indeed"); while (!queue.isEmpty()) { System.out.println(queue.poll()); } } }
Output:
short medium very long indeed
Contoh ini menunjukkan cara untuk mentakrifkan pembanding tersuai dan menggunakan pembina PriorityQueue untuk mencapai pengisihan berdasarkan panjang String.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Pengisihan Tersuai dalam Java PriorityQueue?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!