国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

優(yōu)先級隊列

這篇具有很好參考價值的文章主要介紹了優(yōu)先級隊列。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

?前言:

1、PriorityQueue的特性

.2 PriorityQueue常用接口介紹

Ⅰ、PriorityQueue常見的構(gòu)造方法

?Ⅱ、常用的方法

Ⅲ、PriorityQueue的擴容方式:

?3、應用


?前言:

普通的隊列是一種 先進先出的數(shù)據(jù)結(jié)構(gòu),元素在隊列尾追加,而從隊列頭刪除。在優(yōu)先隊列中,元素被賦予優(yōu)先級。當訪問元素時,具有最高優(yōu)先級的元素最先刪除。優(yōu)先隊列具有最高級先出 (first in, largest out)的行為特征。通常采用 數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)。
在下面這篇文章中講解了堆。
八大排序之選擇排序_冷兮雪的博客-CSDN博客

1、PriorityQueue的特性

Java 集合框架中提供了 PriorityQueue PriorityBlockingQueue 兩種類型的優(yōu)先級隊列, PriorityQueue 是線 程不安全的, PriorityBlockingQueue 是線程安全的 ,本文主要介紹 PriorityQueue 。

?查看源碼發(fā)現(xiàn):PriorityQueue繼承了AbstractQueue,并且初始容量為11,AbstractQueue又實現(xiàn)了Queue接口

優(yōu)先級隊列

?優(yōu)先級隊列

優(yōu)先級隊列

關于PriorityQueue的使用要注意:
  1. ?使用時必須導入PriorityQueue所在的包,即:?
    import java.util.PriorityQueue;
  2. ?PriorityQueue中放置的元素必須要能夠比較大小,不能插入無法比較大小的對象,否則會拋出 ClassCastException異常
  3. 不能插入null對象,否則會拋出NullPointerException
  4. ?沒有容量限制,可以插入任意多個元素,其內(nèi)部可以自動擴容
  5. 插入和刪除元素的時間復雜度為log?N
  6. PriorityQueue底層使用了堆數(shù)據(jù)結(jié)構(gòu),
  7. ?PriorityQueue默認情況下是小堆---即每次獲取到的元素都是最小的元素(如果要設置為大根堆的話需要重寫比較器來實現(xiàn)或者借助lambda表達式
    package 選擇排序;
    
    import java.util.PriorityQueue;
    
    public class 優(yōu)先級隊列 {
        public static void main(String[] args) {
            PriorityQueue<Integer> queue=new PriorityQueue<>();
            queue.offer(4);
            queue.offer(2);
            queue.offer(3);
            queue.offer(7);
            queue.offer(9);
            System.out.println(queue.peek());//2
        }
    }
    

方法一:比較器

PriorityQueue<Integer> queue=new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });

方法二:lambda表達式

Queue<Integer> queue = new PriorityQueue<>((o1, o2) -> o2 - o1);
import java.util.Comparator;
import java.util.PriorityQueue;


public class 優(yōu)先級隊列 {
    public static void main(String[] args) {
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        queue.offer(4);
        queue.offer(2);
        queue.offer(3);
        queue.offer(7);
        queue.offer(9);
        System.out.println(queue.peek());//2
        PriorityQueue<Integer> queue1=new PriorityQueue<>((o1, o2) -> o2-o1);
        queue1.offer(4);
        queue1.offer(2);
        queue1.offer(3);
        queue1.offer(7);
        queue1.offer(9);
        System.out.println(queue1.peek());//9
    }
}

2 PriorityQueue常用接口介紹

Ⅰ、PriorityQueue常見的構(gòu)造方法

構(gòu)造器
解釋
PriorityQueue()
創(chuàng)建一個空的優(yōu)先級隊列,默認容量是 11
PriorityQueue(int
initialCapacity)
創(chuàng)建一個初始容量為 initialCapacity 的優(yōu)先級隊列,注意:
initialCapacity不能小于1 ,否則會拋 IllegalArgumentException 異 常
PriorityQueue(Collection<?
extends E> c)
用一個集合來創(chuàng)建優(yōu)先級隊列
import java.util.PriorityQueue;

class Student implements Comparable<Student>{
    public int age;

    @Override
    public int compareTo(Student o) {//如果沒有比較器,則下面添加時則會報錯
        return this.age-o.age;
    }
}
public class 優(yōu)先級隊列 {

    public static void main(String[] args) {
        PriorityQueue<Student> queue=new PriorityQueue<>();
        queue.offer(new Student());
        queue.offer(new Student());
    }
}

?因為PriorityQueue不能插入無法比較大小的對象,需要實現(xiàn)比較器。

優(yōu)先級隊列

?Ⅱ、常用的方法

Modifier and Type Method and Description
boolean
add(E e)
將指定的元素插入到此優(yōu)先級隊列中。
void clear()
從此優(yōu)先級隊列中冊除所有元素。
Comparatore<? super E>

comparator(

返回用于為了在這個隊列中的元素,或比較null如果此隊列根據(jù)所述排序natural ordering的元素。

boolean contains(object o)
如果此隊列包含指定的元素,則返回true.
Iteratore<E> iterator()
返回此隊列中的元素的迭代器。
boolean offer(E e)
將指定的元素插入到此優(yōu)先級隊列中。
E peek ()
檢素但不刪除此隊列的頭,如果此隊列為空,則返回null.
E poll()
檢索并刪除此隊列的頭,如果此隊列為空,則返回null。
boolean remove(object o)
從該隊列中刪除指定元素的單個實例(如果存在)。
int size()
返回此集合中的元素數(shù)。
object[] toArray()
返回一個包含此隊列中所有元素的數(shù)組。
<T>? T[]

toArray(T[]a)
返回一個包含此隊列中所有元素的數(shù)組;返回的數(shù)組的運行時類型是指定數(shù)組的運行時類型。

Ⅲ、PriorityQueue的擴容方式:

private void grow(int minCapacity) {
        int oldCapacity = queue.length;
        // Double size if small; else grow by 50%
        int newCapacity = oldCapacity + ((oldCapacity < 64) ?
                                         (oldCapacity + 2) :
                                         (oldCapacity >> 1));
        // overflow-conscious code
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        queue = Arrays.copyOf(queue, newCapacity);
    }

    private static int hugeCapacity(int minCapacity) {
        if (minCapacity < 0) // overflow
            throw new OutOfMemoryError();
        return (minCapacity > MAX_ARRAY_SIZE) ?
            Integer.MAX_VALUE :
            MAX_ARRAY_SIZE;
    }
優(yōu)先級隊列的擴容說明:
  • 如果容量小于64時,是按照oldCapacity2倍方式擴容的
  • 如果容量大于等于64,是按照oldCapacity1.5倍方式擴容的
  • 如果容量超過MAX_ARRAY_SIZE,按照MAX_ARRAY_SIZE來進行擴容

優(yōu)先級隊列

?3、應用

經(jīng)典優(yōu)先級隊列問題——TOP-K問題:最大或者最小的前k個數(shù)據(jù)

面試題 17.14. 最小K個數(shù) - 力扣(Leetcode)

class Solution {
    public int[] smallestK(int[] arr, int k) {
// 參數(shù)檢測
        if (null == arr || k <= 0)
            return new int[0];
        PriorityQueue<Integer> q = new PriorityQueue<>(arr.length);
// 將數(shù)組中的元素依次放到堆中
        for (int i = 0; i < arr.length; ++i) {
            q.offer(arr[i]);
        }
// 將優(yōu)先級隊列的前k個元素放到數(shù)組中
        int[] ret = new int[k];
        for (int i = 0; i < k; ++i) {
            ret[i] = q.poll();
        }
        return ret;
    }
}

?692. 前K個高頻單詞 - 力扣(Leetcode)

?這題既可以使用HashMap也可以使用優(yōu)先級隊列。

優(yōu)先級隊列思想

我們可以創(chuàng)建一個小根優(yōu)先隊列(顧名思義,就是優(yōu)先隊列頂端元素是最小元素的優(yōu)先隊列)。我們將每一個字符串插入到優(yōu)先隊列中,如果優(yōu)先隊列的大小超過了 k,那么我們就將優(yōu)先隊列頂端元素彈出。這樣最終優(yōu)先隊列中剩下的 k個元素就是前 k?個出現(xiàn)次數(shù)最多的單詞。文章來源地址http://www.zghlxwxcb.cn/news/detail-434570.html

到了這里,關于優(yōu)先級隊列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【CSS】CSS 特性 ( CSS 優(yōu)先級 | 優(yōu)先級引入 | 選擇器基本權(quán)重 )

    【CSS】CSS 特性 ( CSS 優(yōu)先級 | 優(yōu)先級引入 | 選擇器基本權(quán)重 )

    定義 CSS 樣式時 , 可能出現(xiàn)? 多個 類型相同的 規(guī)則 ? 定義在 同一個元素上 , 如果 CSS 選擇器 相同 ?,? 執(zhí)行 CSS 層疊性 ?, 根據(jù)? 就近原則 ?選擇執(zhí)行的樣式 , 如 : 出現(xiàn)兩個 div 標簽選擇器 , 都設置 color 文本顏色 ; 如果 CSS 選擇器 不同 ,? 則需要考慮 CSS 優(yōu)先級 問題 ,? 需要計

    2024年02月10日
    瀏覽(42)
  • 【堆的認識及其優(yōu)先級隊列】java代碼實現(xiàn),保姆級教程學習堆和優(yōu)先級隊列

    【堆的認識及其優(yōu)先級隊列】java代碼實現(xiàn),保姆級教程學習堆和優(yōu)先級隊列

    前言: 大家好,我是 良辰 丫?????,我們又見面了,前面我們講了用鏈表實現(xiàn)的二叉樹,今天我們來接觸 堆 的概念,堆是一種特殊的二叉樹,只不過咱們的對底層原理是數(shù)組,堆也是我們在做題中經(jīng)常見到的,那么,接下來我們就慢慢的去接觸堆, 認識堆,理解堆,掌

    2024年02月02日
    瀏覽(32)
  • Linux_進程的優(yōu)先級&&環(huán)境變量&&上下文切換&&優(yōu)先級隊列

    Linux_進程的優(yōu)先級&&環(huán)境變量&&上下文切換&&優(yōu)先級隊列

    什么是優(yōu)先級? 指定一個進程獲取某種資源的先后順序 本質(zhì)是進程獲取cpu資源的優(yōu)先順序 為什么要有優(yōu)先級 進程訪問的資源(CPU)是有限的 操作系統(tǒng)關于調(diào)度和優(yōu)先級的原則:分時操作系統(tǒng),基本的公平,如果進程因為長時間不被調(diào)整,就造成了饑餓問題 Linux的優(yōu)先級特

    2024年04月09日
    瀏覽(22)
  • 優(yōu)先級隊列

    優(yōu)先級隊列

    目錄 ?前言: 1、PriorityQueue的特性 .2 PriorityQueue常用接口介紹 Ⅰ、PriorityQueue常見的構(gòu)造方法 ?Ⅱ、常用的方法 Ⅲ、PriorityQueue的擴容方式: ?3、應用 普通的隊列是一種 先進先出 的數(shù)據(jù)結(jié)構(gòu),元素在隊列尾追加,而從隊列頭刪除。在優(yōu)先隊列中,元素被賦予優(yōu)先級。當訪問元

    2024年02月02日
    瀏覽(28)
  • 優(yōu)先級隊列【C++】

    優(yōu)先級隊列【C++】

    優(yōu)先隊列(priority_queue)也是隊列的一種,priority_queue的接口是和queue的接口是相同的。所以兩者的使用語法也是相同的。我們直接看優(yōu)先隊列(priority——queue)的底層實現(xiàn)原理。 默認情況下priority_queue是大堆。 priority_queue的底層實際上就是堆,模擬實現(xiàn)priority_queue之前,需要

    2024年02月10日
    瀏覽(24)
  • Java優(yōu)先級隊列-堆

    大家好,我是曉星航。今天為大家?guī)淼氖?Java優(yōu)先級隊列(堆) 的講解!?? 使用數(shù)組保存二叉樹結(jié)構(gòu),方式即將二叉樹用 層序遍歷 方式放入數(shù)組中。 一般只適合表示完全二叉樹,因為非完全二叉樹會有空間的浪費。 這種方式的主要用法就是堆的表示。 已知雙親(parent)的下

    2023年04月16日
    瀏覽(21)
  • 「數(shù)據(jù)結(jié)構(gòu)」優(yōu)先級隊列

    ?? 個人主頁 :Ice_Sugar_7 ?? 所屬專欄 :Java數(shù)據(jù)結(jié)構(gòu) ?? 歡迎點贊收藏加關注哦! 優(yōu)先級隊列底層是用堆實現(xiàn)的 ,關于堆的實現(xiàn),之前的文章已經(jīng)詳細介紹過了,文章鏈接:二叉樹1:堆的實現(xiàn) 方法 功能 PriorityQueue() 創(chuàng)建一個空的優(yōu)先級隊列,默認容量是11 PriorityQueue(int i

    2024年02月20日
    瀏覽(46)
  • 【JAVA】優(yōu)先級隊列(堆)

    【JAVA】優(yōu)先級隊列(堆)

    羨慕別人就讓自己變得更好! 優(yōu)先級隊列(堆)可用于topK問題 有大小根堆 注意堆的模擬實現(xiàn) 堅持真的很難但是真的很酷! 隊列是一種先進先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),但有些情況下,操作的數(shù)據(jù)可能帶有優(yōu)先級,一般出隊列時,可能需要優(yōu)先級高的元素先出隊列。 此時,數(shù)據(jù)結(jié)

    2024年02月15日
    瀏覽(22)
  • rabbitmq的優(yōu)先級隊列

    rabbitmq的優(yōu)先級隊列

    在我們系統(tǒng)中有一個 訂單催付 的場景,我們的客戶在天貓下的訂單 , 淘寶會及時將訂單推送給我們,如果在用戶設定的時間內(nèi)未付款那么就會給用戶推送一條短信提醒,很簡單的一個功能對吧,但是,tianmao商家對我們來說,肯定是要分大客戶和小客戶的對吧,比如像蘋果,

    2024年02月11日
    瀏覽(15)
  • CSS_三大特性下_優(yōu)先級

    CSS_三大特性下_優(yōu)先級

    CSS_特性繼承和層疊 - Bublly - 博客園 (cnblogs.com) CSS_特性繼承和層疊 - Bublly - 博客園 (cnblogs.com) 1特性: 不同選擇器具有不同的優(yōu)先級,優(yōu)先級高的選擇器樣式會覆蓋優(yōu)先級低選擇器樣式 2優(yōu)先級公式: 繼承通配符選擇器標簽選擇器類選擇器id選擇器行內(nèi)樣式!important 3注意點:

    2024年02月08日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包