Java優(yōu)先隊列的創(chuàng)建與使用詳解
Java優(yōu)先隊列的創(chuàng)建與使用
最近刷到了力扣的第347題.前K個高頻元素,由于之前一直用C++刷題,對于Java的語法還有些生疏,這道題目需要使用優(yōu)先隊列解題,一下子不知道怎么創(chuàng)建了。
首先在Java中優(yōu)先隊列是由PriorityQueue實現(xiàn)Queue的接口,可以對隊列中的元素按照大小順序進行排序,對于隊列中的元素,可以是基本數(shù)據(jù)類型的包裝類,也可以是自定義的類。
1.基本數(shù)據(jù)類型作為隊列元素
我們以Integer,整數(shù)類型的包裝類為例,構(gòu)造一個優(yōu)先隊列
Queue<Integer>que = new PriorityQueue<>(); que.add(2); que.add(1); que.add(3); //在這種默認的構(gòu)造方式下,隊列中的元素是從小到大排序的 //隊列中元素順序依次為1,2,3
如果要構(gòu)造最大優(yōu)先隊列,可以使用lambda表達式
代碼如下所示:
//注意這里return x1-x2為最小優(yōu)先隊列,x2-x1為最大優(yōu)先隊列
Queue<Integer>que = new PriorityQueue<>((x1,x2)->{return x2-x1;});
que.add(2);
que.add(1);
que.add(3);
//此時隊列中的元素依次為3,2,12.自定義數(shù)據(jù)類型作為隊列元素
假設(shè)我們需要使用Map<Integer,Integer>來對出現(xiàn)過的整數(shù)統(tǒng)計出現(xiàn)過的次數(shù),即按照Map的值進行排序,應(yīng)該如何做呢?
看如下代碼:
Map<Integer,Integer>map = new HashMap<>();
//....整數(shù)出現(xiàn)次數(shù)進行統(tǒng)計,假設(shè)已經(jīng)全部統(tǒng)計進入map中
//用一個集合來獲取map中的所有鍵值對
Set<Map.Entry<Integer,Integer>> set = map.entrySet();
//創(chuàng)建優(yōu)先隊列 同樣使用lambda表達式,getValue()函數(shù)用于獲取map中的值
//x1-x2即按照升序,是最小優(yōu)先隊列
Queue<Map.Entry<Integer,Integer>>que = new PriorityQueue<>((x1,x2)->{return x1.getValue()-x2.getValue();})
//再把Set中的鍵值對加入que中 則元素按照值的升序排列在隊列que中
for(Map.Entry<Integer,Integer> en:set){
que.add(en); //或que.offer(en);
}使用Map<Integer,Integer>類型創(chuàng)建優(yōu)先隊列的過程如上所示,如果是一些自定義的類,比如學生的學號,年齡,進行排序,同樣可以這樣操作,關(guān)于PriorityQueue的方法可以查看java api手冊
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot整合RocketMQ實現(xiàn)發(fā)送同步消息
RocketMQ 是一款開源的分布式消息中間件,由阿里巴巴開源,它具有高可用性、高性能、低延遲等特點,廣泛應(yīng)用于阿里巴巴集團內(nèi)部以及眾多外部企業(yè)的業(yè)務(wù)系統(tǒng)中,本文給大家介紹了SpringBoot整合RocketMQ實現(xiàn)發(fā)送同步消息,需要的朋友可以參考下2024-04-04
詳解Spring Boot配置使用Logback進行日志記錄的實戰(zhàn)
本篇文章主要介紹了詳解Spring Boot配置使用Logback進行日志記錄的實戰(zhàn),具有一定的參考價值,有興趣的朋友可以了解一下2017-07-07
SpringBoot結(jié)合Redis實現(xiàn)接口冪等性的示例代碼
本文主要介紹了SpringBoot結(jié)合Redis實現(xiàn)接口冪等性的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06
springboot+thymeleaf+shiro標簽的實例
這篇文章主要介紹了springboot+thymeleaf+shiro標簽的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

