cari
RumahJavajavaTutorialBarisan 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.

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);
    }
}</child></child>

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);
    }
}</child></child>

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
Artikel ini dikembalikan pada:CSDN. Jika ada pelanggaran, sila hubungi admin@php.cn Padam

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 laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma