Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mencapai Pengisihan Tersuai dalam Java PriorityQueue?

Bagaimanakah Saya Boleh Mencapai Pengisihan Tersuai dalam Java PriorityQueue?

DDD
Lepaskan: 2024-12-22 21:32:25
asal
787 orang telah melayarinya

How Can I Achieve Custom Sorting in a Java PriorityQueue?

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 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);
Salin selepas log masuk

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());
        }
    }
}
Salin selepas log masuk

Output:

short
medium
very long indeed
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan