Jadual Kandungan
1. Perkara penting apabila menggunakan PriorityQueue
2. Pengenalan kepada Antara Muka Biasa PriorityQueue
1. Pembinaan Gilir Keutamaan
2. Perbandingan elemen dalam PriorityQueue
tawaran(E e)
Rumah Java javaTutorial Barisan keutamaan PriorityQueue rangka kerja koleksi Java

Barisan keutamaan PriorityQueue rangka kerja koleksi Java

Jun 09, 2022 am 11:47 AM
java

Artikel ini membawakan anda pengetahuan yang berkaitan tentang java, yang terutamanya memperkenalkan pengetahuan yang berkaitan tentang baris gilir keutamaan PriorityQueue Rangka kerja koleksi Java menyediakan dua jenis keutamaan, PriorityQueue dan PriorityBlockingQueue, PriorityQueue ialah thread-. tidak selamat, dan PriorityBlockingQueue adalah selamat untuk rangkaian. Mari kita lihat bersama-sama.

Barisan keutamaan PriorityQueue rangka kerja koleksi Java

Pembelajaran yang disyorkan: "tutorial video java"

Rangka kerja koleksi Java menyediakan dua jenis: PriorityQueue dan PriorityBlockingQueue Priority queue, PriorityQueue adalah thread-unsafe, dan PriorityBlockingQueue adalah thread-safe Artikel ini terutamanya memperkenalkan PriorityQueue

Hubungan priorityQueue dalam rangka kerja koleksi Java adalah seperti berikut:

1. Perkara penting apabila menggunakan PriorityQueue

1. Apabila menggunakannya, anda mesti mengimport pakej di mana PriorityQueue terletak, iaitu:

import java util.PriorityQueue

2. Elemen yang diletakkan dalam PriorityQueue mestilah setanding saiznya dan objek yang tidak boleh dibandingkan saiznya tidak boleh disisipkan, jika tidak
pengecualian ClassCastException akan dilemparkan

3 Objek null tidak boleh disisipkan, jika tidak NullPointerException akan dilemparkan

4 masukkan sebarang bilangan elemen, dan kapasiti dalaman boleh dikembangkan secara automatik

5 Kerumitan masa untuk memasukkan dan memadam elemen ialah log base 2 n

6 lapisan asas PriorityQueue menggunakan struktur data timbunan

7 secara lalai Ia adalah timbunan kecil --- iaitu, elemen yang diperolehi setiap kali ialah elemen terkecil ( Jika kita ingin mengubahnya. ke dalam timbunan yang besar, kita perlu membandingkan semula kaedah. Kaedah perbandingan lalai ialah kaedah compareTo dalam antara muka Sebanding)

2. Pengenalan kepada Antara Muka Biasa PriorityQueue

1. Pembinaan Gilir Keutamaan

Berikut ialah beberapa kaedah pembinaan biasa dalam PriorityQueue, untuk yang lain, anda boleh merujuk kepada dokumentasi bantuan.

Buat baris gilir keutamaan dengan kapasiti awal InitialCapacity, Nota:initialCapacity tidak boleh kurang daripada 1, jika tidak, ia akan dilemparkan IllegalArgumentExceptionExceptionNormal
Pembina Pengenalan fungsi
PriorityQueue() td > Buat baris gilir keutamaan kosong,
构造器 功能介绍
PriorityQueue() 创建一个空的优先级队列,默认容量是11
PriorityQueue(int
initialCapacity)
创建一个初始容量为initialCapacity的优先级队列,注意:initialCapacity不能小于1,否则会抛IllegalArgumentException异
PriorityQueue(Collection extends E> c) 用一个集合来创建优先级队列
PriorityQueue(Comparator<? super E> comparator) 创建具有默认初始容量的优先级队列,并根据指定的比较器对其元素进行比较
PriorityQueue(int initialCapacity, Comparator <? super E> comparator)

创建一个初始容量为<strong>initialCapacity</strong>的优先级队列,根据指定的比较器对其元素进行比较

注意:initialCapacity不能小于1,否则会抛IllegalArgumentException异

Kapasiti lalai ialah 11
PriorityQueue(int initialCapacity)
PriorityQueue(Collection extends E> c) Gunakan koleksi untuk mencipta baris gilir keutamaan
PriorityQueue(Comparator<? super E> comparator) Buat dengan permulaan lalai kapasiti Barisan keutamaan dan membandingkan elemennya mengikut pembanding yang ditentukan oleh
PriorityQueue(int initialCapacity, Comparator &lt ;? super E> pembanding) Buat baris gilir keutamaan dengan kapasiti awal initialCapacity , bandingkan elemennya mengikut pembanding yang ditentukan oleh Nota: initialCapacity tidak boleh kurang daripada 1, jika tidak, IllegalArgumentException akan dibuangNormal

2. Perbandingan elemen dalam PriorityQueue

Selepas membaca kaedah pembinaan, mari kita fikirkan soalan sekali lagi

Bagaimanakah barisan keutamaan mencapai pesanan? Kerana barisan keutamaan dilaksanakan dengan bantuan timbunan akar kecil

Dalam proses melaksanakan timbunan akar kecil, kita tahu bahawa perbandingan elemen mesti berlaku, jadi elemen dalam PriorityQueue mesti boleh membandingkan dalam saiz. Jadi bagaimanakah PriorityQueue membandingkan elemen?

PriorityQueue menggunakan:
Setanding dan Pembanding.

1. Comparble ialah kaedah perbandingan dalaman lalai Jika pengguna memasukkan objek jenis tersuai , objek mesti melaksanakan antara muka Comparble dan mengatasi Kaedah compareTo

2. Pengguna juga boleh memilih untuk menggunakan objek pembanding Jika pengguna

memasukkan objek jenis tersuai, kelas pembanding mesti disediakan dan kelas mesti melaksanakan antara muka Pembanding dan mengatasinya. membandingkan kaedah.

Kami melihat bahawa program melaporkan ralat di sini, mengapa? Kerana objek Kanak-kanak yang kami masukkan tidak boleh dibandingkan (

tidak melaksanakan antara muka Sebanding dan tidak menggunakan pembanding tersuai)

Anda boleh lihat

Maksudnya, kami menggunakan kaedah perbandingan lalai compareTo dalam antara muka Sebanding

Pada masa ini kita lihat pada ralat lagi Maklumat

Nampaknya ada masalah apabila memasukkan elemen ke dalam PriorityQueue

Kemudian mari kita buka kod sumber PriorityQueue dan lihat (

Berikut ialah kod sumber kaedah tawaran dalam PriorityQueue)

Lihat semula kod sumber shiftUp

Teruskan klik dalam SiftupComparable

pada masa ini, mari kita lihat semula objek kanak -kanak yang kita masukkan ke dalam keutamaan Ia tidak mempunyai pembanding tersuai dan tidak melaksanakan antara muka Sebanding ,

Sudah tentu ia melaporkan ralat! Kalau begitu, mari kita laksanakan antara muka Setanding dalam kelas Kanak-kanak dan bandingkan mengikut umur

import java.util.PriorityQueue;
class Child implements Comparable<Child>{
    int age;
    String name;

    public Child(int age, String name) {
        this.age = age;
        this.name = name;
    }

    @Override
    public int compareTo(Child o) {
        return this.age - o.age;  // 默认实现小根堆
    }

    @Override
    public String toString() {
        return "Child{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
public class TestPriorityQueue {
    public static void main(String[] args) {
        PriorityQueue<Child> priorityQueue = new PriorityQueue<>();

        priorityQueue.offer(new Child(12, "小亮"));
        priorityQueue.offer(new Child(11, "小红"));
        priorityQueue.offer(new Child(8, "小强"));
        System.out.println(priorityQueue);
    }
}
Salin selepas log masuk

Jika anda mahu melaksanakan Dagen Heap mudah dikendalikan

Di atas kami telah melaksanakan antara muka Serasi, jadi bagaimana jika kami menyesuaikan pembanding umur?

class Child {
    int age;
    String name;

    public Child(int age, String name) {
        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Child{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
class AgeComparator implements Comparator<Child> {

    @Override
    public int compare(Child o1, Child o2) {
        return o1.age - o2.age; // 实现小根堆
        // return o2.ae - o1.age 实现大根堆
    }
}
public class TestPriorityQueue {
    public static void main(String[] args) {
        AgeComparator ageComparator = new AgeComparator();
        // 创建具有默认初始容量的 PriorityQueue ,并根据指定的比较器对其元素进行排序。
        PriorityQueue<Child> priorityQueue = new PriorityQueue<>(ageComparator);
        // 可以看到这里我的Child对象虽然没有实现Comparable接口,但因为我们对Child对象自定义了一个年龄比较器,所以插入元素不会报错
        priorityQueue.offer(new Child(12, "小亮"));
        priorityQueue.offer(new Child(11, "小红"));
        priorityQueue.offer(new Child(8, "小强"));
        System.out.println(priorityQueue);
    }
}
Salin selepas log masuk

3. Sisip/padam/dapatkan elemen keutamaan tertinggi
Nama fungsi Pengenalan fungsi
boolean

tawaran(E e)

Sisipkan elemen e , sisipan berjaya dan mengembalikan benar. Jika objek e kosong, pengecualian NullPointerException dilemparkan, kerumitan masa, nota: pengembangan akan dilakukan apabila ruang tidak mencukupi
E peek( ) Dapatkan elemen dengan keutamaan tertinggi Jika baris gilir keutamaan kosong, kembalikan null
E poll() Shift Alih keluar elemen dengan keutamaan tertinggi dan kembalikan Jika baris gilir keutamaan kosong, kembalikan null
int size() Dapatkan. bilangan elemen yang sah
void
函数名 功能介绍
boolean
offer(E e)
插入元素e,插入成功返回true,如果e对象为空,抛出NullPointerException异常,时
间复杂度 ,注意:空间不够时候会进行扩容
E peek() 获取优先级最高的元素,如果优先级队列为空,返回null
E poll() 移除优先级最高的元素并返回,如果优先级队列为空,返回null
int size() 获取有效元素的个数
void
clear()
清空

boolean 

isEmty()

检测优先级队列是否为空,为空返回true
clear()
Clear

boolean isEmty()

Mengesan sama ada baris gilir keutamaan kosong, kembali benar jika kosong
Kajian yang disyorkan: " tutorial video java》

Atas ialah kandungan terperinci Barisan keutamaan PriorityQueue rangka kerja koleksi Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Program Java untuk mencari kelantangan kapsul Program Java untuk mencari kelantangan kapsul Feb 07, 2025 am 11:37 AM

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4

See all articles