电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java PriorityQueue數據結構接口原理及用法

瀏覽:6日期:2022-08-22 11:29:09

PriorityQueue是從JDK1.5開始提供的新的數據結構接口,它是一種基于優先級堆的極大優先級隊列。優先級隊列是不同于先進先出隊列的另一種隊列。每次從隊列中取出的是具有最高優先權的元素。如果不提供Comparator的話,優先隊列中元素默認按自然順序排列,也就是數字默認是小的在隊列頭,字符串則按字典序排列(參閱 Comparable),也可以根據 Comparator 來指定,這取決于使用哪種構造方法。優先級隊列不允許 null 元素。依靠自然排序的優先級隊列還不允許插入不可比較的對象(這樣做可能導致 ClassCastException)

優先級隊列是無界的,但是有一個內部容量,控制著用于存儲隊列元素的數組大小。它通常至少等于隊列的大小。隨著不斷向優先級隊列添加元素,其容量會自動增加。無需指定容量增加策略的細節

簡單應用:

package test;import java.util.PriorityQueue;public class PriorityQueueTest1 { @SuppressWarnings('unchecked') public static void main(String[] args) { PriorityQueue queue = new PriorityQueue(); queue.add('AAAAA'); // Add接受的參數是Obj,PriorityQueue使用integer String等基本的數據類型時,默認new時有參數,如果不寫則是按照默認排序 queue.add('BBBBB'); queue.add('CCCCC'); queue.add('DDDDD'); System.out.println(queue.peek()); // 獲取但不移除此隊列的頭 System.out.println(queue.poll()); // 獲取并移除此隊列的頭 System.out.println(queue.poll()); queue.offer('ZZZZZ'); // 將指定的元素插入此優先級隊列 System.out.println(queue.poll()); System.out.println(queue.poll()); System.out.println(queue.poll()); System.out.println(queue.poll()); // 到這里已經沒有元素,打印Null }}

定義比較器:

package test;import java.util.Comparator;import java.util.PriorityQueue;@SuppressWarnings('unchecked')public class PriorityQueueTest2 { private static PriorityQueue queue = new PriorityQueue(10,new Comparators()); public static void main(String[] args) { QueueObject queueObject = new QueueObject(); queueObject.setId(4); queueObject.setObject('AAAAA'); queue.add(queueObject); QueueObject queueObject1 = new QueueObject(); queueObject1.setId(1); queueObject1.setObject('BBBBB'); queue.add(queueObject1); QueueObject queueObject2 = new QueueObject(); queueObject2.setId(3); queueObject2.setObject('CCCCC'); queue.add(queueObject2); System.out.println(((QueueObject)queue.poll()).getObject()); System.out.println(((QueueObject)queue.poll()).getObject()); System.out.println(((QueueObject)queue.poll()).getObject()); }}class QueueObject { private int id; private Object object; public int getId() { return id; } public void setId(int id) { this.id = id; } public Object getObject() { return object; } public void setObject(Object object) { this.object = object; }}@SuppressWarnings('unchecked')class Comparators implements Comparator{ public int compare(Object arg0, Object arg1) { int val1 = ((QueueObject)arg0).getId(); int val2 = ((QueueObject)arg1).getId(); return val1 < val2 ? 0 : 1; }}

注意事項:

注意1:該隊列是用數組實現,但是數組大小可以動態增加,容量無限。

注意2:此實現不是同步的。不是線程安全的。如果多個線程中的任意線程從結構上修改了列表, 則這些線程不應同時訪問 PriorityQueue 實例,這時請使用線程安全的PriorityBlockingQueue 類。

注意3:不允許使用 null 元素。

注意4:此實現為插入方法(offer、poll、remove() 和 add 方法)提供 O(log(n)) 時間;

為 remove(Object) 和 contains(Object) 方法提供線性時間;為檢索方法(peek、element 和 size)提供固定時間。

注意5:方法iterator()中提供的迭代器并不保證以有序的方式遍歷優先級隊列中的元素。

至于原因可參考下面關于PriorityQueue的內部實現

如果需要按順序遍歷,請考慮使用 Arrays.sort(pq.toArray())。

注意6:可以在構造函數中指定如何排序。如:

PriorityQueue() 使用默認的初始容量(11)創建一個 PriorityQueue,并根據其自然順序來排序其元素(使用 Comparable)。 PriorityQueue(int initialCapacity) 使用指定的初始容量創建一個 PriorityQueue,并根據其自然順序來排序其元素(使用 Comparable)。 PriorityQueue(int initialCapacity, Comparator comparator) 使用指定的初始容量創建一個 PriorityQueue,并根據指定的比較器comparator來排序其元素。

注意7:此類及其迭代器實現了 Collection 和 Iterator 接口的所有可選 方法。

PriorityQueue的內部實現

PriorityQueue對元素采用的是堆排序,頭是按指定排序方式的最小元素。堆排序只能保證根是最大(最小),整個堆并不是有序的。

方法iterator()中提供的迭代器可能只是對整個數組的依次遍歷。也就只能保證數組的第一個元素是最小的

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 电缆接头-防爆电缆接头-格兰头-金属电缆接头-防爆填料函 | 冷水机-冰水机-冷冻机-冷风机-本森智能装备(深圳)有限公司 | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 学校用栓剂模,玻璃瓶轧盖钳,小型安瓿熔封机,实验室安瓿熔封机-长沙中亚制药设备有限公司 | 福建自考_福建自学考试网 | 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 电车线(用于供电给电车的输电线路)-百科| 移动机器人产业联盟官网| 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 优秀的临床医学知识库,临床知识库,医疗知识库,满足电子病历四级要求,免费试用 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 交通气象站_能见度检测仪_路面状况监测站- 天合环境科技 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | 铆钉机|旋铆机|东莞旋铆机厂家|鸿佰专业生产气压/油压/自动铆钉机 | 匀胶机旋涂仪-声扫显微镜-工业水浸超声-安赛斯(北京)科技有限公司 | 天津仓储物流-天津电商云仓-天津云仓一件代发-博程云仓官网 | 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 立刷【微电签pos机】-嘉联支付立刷运营中心 | 高考志愿规划师_高考规划师_高考培训师_高报师_升学规划师_高考志愿规划师培训认证机构「向阳生涯」 | 浙江浩盛阀门有限公司| 高柔性拖链电缆_卷筒电缆_耐磨耐折聚氨酯电缆-玖泰特种电缆 | 丹佛斯变频器-Danfoss战略代理经销商-上海津信变频器有限公司 | 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 桐城新闻网—桐城市融媒体中心主办 | 聚合氯化铝-碱式氯化铝-聚合硫酸铁-聚氯化铝铁生产厂家多少钱一吨-聚丙烯酰胺价格_河南浩博净水材料有限公司 | 贝朗斯动力商城(BRCPOWER.COM) - 买叉车蓄电池上贝朗斯商城,价格更超值,品质有保障! | 卧涛科技有限公司科技项目申报公司|高新技术企业申报|专利申请 | 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 山东活动策划|济南活动公司|济南公关活动策划-济南锐嘉广告有限公司 |