午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java PriorityQueue數(shù)據(jù)結(jié)構(gòu)接口原理及用法

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

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

優(yōu)先級(jí)隊(duì)列是無界的,但是有一個(gè)內(nèi)部容量,控制著用于存儲(chǔ)隊(duì)列元素的數(shù)組大小。它通常至少等于隊(duì)列的大小。隨著不斷向優(yōu)先級(jí)隊(duì)列添加元素,其容量會(huì)自動(dòng)增加。無需指定容量增加策略的細(xì)節(jié)

簡(jiǎn)單應(yīng)用:

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接受的參數(shù)是Obj,PriorityQueue使用integer String等基本的數(shù)據(jù)類型時(shí),默認(rèn)new時(shí)有參數(shù),如果不寫則是按照默認(rèn)排序 queue.add('BBBBB'); queue.add('CCCCC'); queue.add('DDDDD'); System.out.println(queue.peek()); // 獲取但不移除此隊(duì)列的頭 System.out.println(queue.poll()); // 獲取并移除此隊(duì)列的頭 System.out.println(queue.poll()); queue.offer('ZZZZZ'); // 將指定的元素插入此優(yōu)先級(jí)隊(duì)列 System.out.println(queue.poll()); System.out.println(queue.poll()); System.out.println(queue.poll()); System.out.println(queue.poll()); // 到這里已經(jīng)沒有元素,打印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; }}

注意事項(xiàng):

注意1:該隊(duì)列是用數(shù)組實(shí)現(xiàn),但是數(shù)組大小可以動(dòng)態(tài)增加,容量無限。

注意2:此實(shí)現(xiàn)不是同步的。不是線程安全的。如果多個(gè)線程中的任意線程從結(jié)構(gòu)上修改了列表, 則這些線程不應(yīng)同時(shí)訪問 PriorityQueue 實(shí)例,這時(shí)請(qǐng)使用線程安全的PriorityBlockingQueue 類。

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

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

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

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

至于原因可參考下面關(guān)于PriorityQueue的內(nèi)部實(shí)現(xiàn)

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

注意6:可以在構(gòu)造函數(shù)中指定如何排序。如:

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

注意7:此類及其迭代器實(shí)現(xiàn)了 Collection 和 Iterator 接口的所有可選 方法。

PriorityQueue的內(nèi)部實(shí)現(xiàn)

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 九九免费 | 亚洲成人精品在线播放 | 一级片特黄 | 国产三级一区二区 | 性感美女毛片 | 日韩成人高清 | 天天综合色 | 日本在线视频一区 | 欧美日本免费 | 超碰1000| 看国产毛片 | 国产亚洲欧美日韩高清 | 国偷自拍第113页 | 亚洲一区在线播放 | 在线观看第一页 | 国产免费av一区二区 | 三级a毛片 | 日韩国产在线观看 | www.色综合| 久久久久亚洲精品 | 超碰伊人网 | 99在线视频精品 | 久中文字幕 | 五月在线视频 | 欧美黄色大片网站 | 久久6精品| www.涩涩爱| 中国黄色三级 | 国产精品高潮av | 久射久 | 在线亚洲精品 | 97超碰在 | 在线日韩中文字幕 | 国产在线观看a | 国产一区99| 久久久久久久久久久网站 | 日本精品久久久久 | 亚洲欧美自偷自拍 | 99青青| 久久午夜伦理 | 成年人国产视频 |