Barisan keutamaan PriorityQueue rangka kerja koleksi 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.
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.
Pembina | Pengenalan fungsi | ||||||||||||
PriorityQueue() td > | Buat baris gilir keutamaan kosong,
|
||||||||||||
PriorityQueue(int initialCapacity) | Buat baris gilir keutamaan dengan kapasiti awal InitialCapacity, Nota:initialCapacity tidak boleh kurang daripada 1, jika tidak, ia akan dilemparkan IllegalArgumentExceptionExceptionNormal|||||||||||||
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 < ;? super E> pembanding) |
Buat baris gilir keutamaan dengan kapasiti awal |
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 penggunamemasukkan objek jenis tersuai, kelas pembanding mesti disediakan dan kelas mesti melaksanakan antara muka Pembanding dan mengatasinya. membandingkan kaedah.
tidak melaksanakan antara muka Sebanding dan tidak menggunakan pembanding tersuai)
Anda boleh lihatMaksudnya, 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
Berikut ialah kod sumber kaedah tawaran dalam PriorityQueue)
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 masukJika 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 masuk3. Sisip/padam/dapatkan elemen keutamaan tertinggi
Nama fungsi | Pengenalan fungsi | ||||||||||||||
booleantawaran(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
|
Clear | ||||||||||||||
Mengesan sama ada baris gilir keutamaan kosong, kembali benar jika kosong |
Atas ialah kandungan terperinci Barisan keutamaan PriorityQueue rangka kerja koleksi Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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

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

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

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

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

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

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.

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
