最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java優(yōu)先隊(duì)列的創(chuàng)建與使用詳解

 更新時(shí)間:2024年08月01日 09:21:44   作者:蒲公英的歲月  
這篇文章主要介紹了Java優(yōu)先隊(duì)列的創(chuàng)建與使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java優(yōu)先隊(duì)列的創(chuàng)建與使用

最近刷到了力扣的第347題.前K個(gè)高頻元素,由于之前一直用C++刷題,對(duì)于Java的語(yǔ)法還有些生疏,這道題目需要使用優(yōu)先隊(duì)列解題,一下子不知道怎么創(chuàng)建了。

首先在Java中優(yōu)先隊(duì)列是由PriorityQueue實(shí)現(xiàn)Queue的接口,可以對(duì)隊(duì)列中的元素按照大小順序進(jìn)行排序,對(duì)于隊(duì)列中的元素,可以是基本數(shù)據(jù)類(lèi)型的包裝類(lèi),也可以是自定義的類(lèi)。

1.基本數(shù)據(jù)類(lèi)型作為隊(duì)列元素

我們以Integer,整數(shù)類(lèi)型的包裝類(lèi)為例,構(gòu)造一個(gè)優(yōu)先隊(duì)列

Queue<Integer>que = new PriorityQueue<>();
que.add(2);
que.add(1);
que.add(3);
//在這種默認(rèn)的構(gòu)造方式下,隊(duì)列中的元素是從小到大排序的
//隊(duì)列中元素順序依次為1,2,3

如果要構(gòu)造最大優(yōu)先隊(duì)列,可以使用lambda表達(dá)式

代碼如下所示:

//注意這里return x1-x2為最小優(yōu)先隊(duì)列,x2-x1為最大優(yōu)先隊(duì)列
Queue<Integer>que = new PriorityQueue<>((x1,x2)->{return x2-x1;});
que.add(2);
que.add(1);
que.add(3);
//此時(shí)隊(duì)列中的元素依次為3,2,1

2.自定義數(shù)據(jù)類(lèi)型作為隊(duì)列元素

假設(shè)我們需要使用Map<Integer,Integer>來(lái)對(duì)出現(xiàn)過(guò)的整數(shù)統(tǒng)計(jì)出現(xiàn)過(guò)的次數(shù),即按照Map的值進(jìn)行排序,應(yīng)該如何做呢?

看如下代碼:

Map<Integer,Integer>map = new HashMap<>();
//....整數(shù)出現(xiàn)次數(shù)進(jìn)行統(tǒng)計(jì),假設(shè)已經(jīng)全部統(tǒng)計(jì)進(jìn)入map中
//用一個(gè)集合來(lái)獲取map中的所有鍵值對(duì)
Set<Map.Entry<Integer,Integer>> set = map.entrySet();
//創(chuàng)建優(yōu)先隊(duì)列 同樣使用lambda表達(dá)式,getValue()函數(shù)用于獲取map中的值
//x1-x2即按照升序,是最小優(yōu)先隊(duì)列
Queue<Map.Entry<Integer,Integer>>que = new PriorityQueue<>((x1,x2)->{return x1.getValue()-x2.getValue();})
//再把Set中的鍵值對(duì)加入que中 則元素按照值的升序排列在隊(duì)列que中
for(Map.Entry<Integer,Integer> en:set){
que.add(en); //或que.offer(en);
}

使用Map<Integer,Integer>類(lèi)型創(chuàng)建優(yōu)先隊(duì)列的過(guò)程如上所示,如果是一些自定義的類(lèi),比如學(xué)生的學(xué)號(hào),年齡,進(jìn)行排序,同樣可以這樣操作,關(guān)于PriorityQueue的方法可以查看java api手冊(cè)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot Nacos實(shí)現(xiàn)自動(dòng)刷新

    SpringBoot Nacos實(shí)現(xiàn)自動(dòng)刷新

    這篇文章主要介紹了SpringBoot Nacos實(shí)現(xiàn)自動(dòng)刷新,Nacos(Dynamic Naming and Configuration Service)是阿里巴巴開(kāi)源的一個(gè)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)
    2023-01-01
  • MyBatis與Hibernate的比較

    MyBatis與Hibernate的比較

    Hibernate 與Mybatis都是流行的持久層開(kāi)發(fā)框架,但Hibernate開(kāi)發(fā)社區(qū)相對(duì)多熱鬧些,支持的工具也多,更新也快,當(dāng)前最高版本4.1.8。而Mybatis相對(duì)平靜,工具較少,當(dāng)前最高版本3.2
    2016-01-01
  • jdk中密鑰和證書(shū)管理工具keytool常用命令詳解

    jdk中密鑰和證書(shū)管理工具keytool常用命令詳解

    keytool JAVA是個(gè)密鑰和證書(shū)管理工具。它使用戶(hù)能夠管理自己的公鑰/私鑰對(duì)及相關(guān)證書(shū),用于(通過(guò)數(shù)字簽名)自我認(rèn)證(用戶(hù)向別的用戶(hù)/服務(wù)認(rèn)證自己)或數(shù)據(jù)完整性以及認(rèn)證服務(wù)
    2014-01-01
  • 關(guān)于Java單個(gè)TCP(Socket)連接發(fā)送多個(gè)文件的問(wèn)題

    關(guān)于Java單個(gè)TCP(Socket)連接發(fā)送多個(gè)文件的問(wèn)題

    這篇文章主要介紹了關(guān)于Java單個(gè)TCP(Socket)連接發(fā)送多個(gè)文件的問(wèn)題,每次我只能使用一個(gè) Socket 發(fā)送一個(gè)文件,沒(méi)有辦法做到連續(xù)發(fā)送文件,本文來(lái)解決這個(gè)問(wèn)題,需要的朋友可以參考下
    2023-04-04
  • Java中遍歷集合的并發(fā)修改異常解決方案實(shí)例代碼

    Java中遍歷集合的并發(fā)修改異常解決方案實(shí)例代碼

    當(dāng)你遍歷集合的同時(shí),又往集合中添加或者刪除元素,就可能報(bào)并發(fā)修改異常,下面這篇文章主要給大家介紹了關(guān)于Java中遍歷集合的并發(fā)修改異常解決方案的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Spring Security 安全框架應(yīng)用原理解析

    Spring Security 安全框架應(yīng)用原理解析

    這篇文章主要介紹了Spring Security 安全框架應(yīng)用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • SpringBoot+MySQL+Jpa實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪改查和分頁(yè)詳解

    SpringBoot+MySQL+Jpa實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪改查和分頁(yè)詳解

    這篇文章主要介紹了SpringBoot+MySQL+Jpa實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪改查和分頁(yè)詳解,需要的朋友可以參考下
    2020-02-02
  • Java中的snowflake算法詳解

    Java中的snowflake算法詳解

    這篇文章主要介紹了Java中的snowflake算法詳解,Snowflake算法產(chǎn)生是為了滿(mǎn)足Twitter每秒上萬(wàn)條消息的請(qǐng)求,每條消息都必須分配一條唯一的id,這些id還需要一些大致的順序,并且在分布式系統(tǒng)中不同機(jī)器產(chǎn)生的id必須不同,需要的朋友可以參考下
    2023-08-08
  • Java 文創(chuàng)商城系統(tǒng)的實(shí)現(xiàn)流程

    Java 文創(chuàng)商城系統(tǒng)的實(shí)現(xiàn)流程

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+mysql+maven+tomcat實(shí)現(xiàn)一個(gè)文創(chuàng)商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • JAVA多線(xiàn)程線(xiàn)程安全性基礎(chǔ)

    JAVA多線(xiàn)程線(xiàn)程安全性基礎(chǔ)

    這篇文章主要介紹了如何測(cè)試Java類(lèi)的線(xiàn)程安全性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

抚顺县| 密山市| 上饶县| 金溪县| 清远市| 兰州市| 东乡| 绥阳县| 沙雅县| 清原| 浙江省| 襄樊市| 潮安县| 石渠县| 甘孜县| 九龙坡区| 乌审旗| 图们市| 合川市| 晴隆县| 监利县| 措美县| 苍梧县| 安龙县| 广汉市| 太仓市| 囊谦县| 上饶县| 景东| 微山县| 肇源县| 宕昌县| 夏邑县| 如皋市| 名山县| 和顺县| 西林县| 新乐市| 水富县| 潮州市| 工布江达县|