日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java队列 PriorityQueue

發布時間:2024/9/30 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java队列 PriorityQueue 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/120829314
本文出自【趙彥軍的博客】

Java隊列 Queue
Java隊列 Deque
Java隊列 PriorityQueue
Java棧 Stack
Java阻塞隊列 LinkedBlockingDeque

文章目錄

  • PriorityQueue
  • 小結

PriorityQueue

我們知道,Queue是一個先進先出(FIFO)的隊列。

在銀行柜臺辦業務時,我們假設只有一個柜臺在辦理業務,但是辦理業務的人很多,怎么辦?

可以每個人先取一個號,例如:A1、A2、A3……然后,按照號碼順序依次辦理,實際上這就是一個Queue。

如果這時來了一個VIP客戶,他的號碼是V1,雖然當前排隊的是A10、A11、A12……但是柜臺下一個呼叫的客戶號碼卻是V1。

這個時候,我們發現,要實現“VIP插隊”的業務,用Queue就不行了,因為Queue會嚴格按FIFO的原則取出隊首元素。我們需要的是優先隊列:PriorityQueue。

PriorityQueue和Queue的區別在于,它的出隊順序與元素的優先級有關,對PriorityQueue調用remove()或poll()方法,返回的總是優先級最高的元素。

要使用PriorityQueue,我們就必須給每個元素定義“優先級”。我們以實際代碼為例,先看看PriorityQueue的行為:

public class Main {public static void main(String[] args) {Queue<String> q = new PriorityQueue<>();// 添加3個元素到隊列:q.offer("apple");q.offer("pear");q.offer("banana");System.out.println(q.poll()); // appleSystem.out.println(q.poll()); // bananaSystem.out.println(q.poll()); // pearSystem.out.println(q.poll()); // null,因為隊列為空} }

我們放入的順序是"apple"、"pear"、"banana",但是取出的順序卻是"apple"、"banana"、"pear",這是因為從字符串的排序看,"apple"排在最前面,"pear"排在最后面。

因此,放入PriorityQueue的元素,必須實現Comparable接口,PriorityQueue會根據元素的排序順序決定出隊的優先級。

如果我們要放入的元素并沒有實現Comparable接口怎么辦?PriorityQueue允許我們提供一個Comparator對象來判斷兩個元素的順序。我們以銀行排隊業務為例,實現一個PriorityQueue:

public class Main {public static void main(String[] args) {Queue<User> q = new PriorityQueue<>(new UserComparator());// 添加3個元素到隊列:q.offer(new User("Bob", "A1"));q.offer(new User("Alice", "A2"));q.offer(new User("Boss", "V1"));System.out.println(q.poll()); // Boss/V1System.out.println(q.poll()); // Bob/A1System.out.println(q.poll()); // Alice/A2System.out.println(q.poll()); // null,因為隊列為空} }class UserComparator implements Comparator<User> {public int compare(User u1, User u2) {if (u1.number.charAt(0) == u2.number.charAt(0)) {// 如果兩人的號都是A開頭或者都是V開頭,比較號的大小:return u1.number.compareTo(u2.number);}if (u1.number.charAt(0) == 'V') {// u1的號碼是V開頭,優先級高:return -1;} else {return 1;}} }class User {public final String name;public final String number;public User(String name, String number) {this.name = name;this.number = number;}public String toString() {return name + "/" + number;} }

實現PriorityQueue的關鍵在于提供的UserComparator對象,它負責比較兩個元素的大小(較小的在前)。UserComparator總是把V開頭的號碼優先返回,只有在開頭相同的時候,才比較號碼大小。

上面的UserComparator的比較邏輯其實還是有問題的,它會把A10排在A2的前面,請嘗試修復該錯誤。

小結

PriorityQueue實現了一個優先隊列:從隊首獲取元素時,總是獲取優先級最高的元素。

PriorityQueue默認按元素比較的順序排序(必須實現Comparable接口),也可以通過Comparator自定義排序算法(元素就不必實現Comparable接口)。

總結

以上是生活随笔為你收集整理的Java队列 PriorityQueue的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 97视频网址 | 五月天激情综合网 | 天天射日 | 亚洲射射射 | 麻豆福利影院 | 婷婷久久综合 | 亚洲精品一区二区三区婷婷月 | 午夜精产品一区二区在线观看的 | 中文字幕日本在线观看 | 一卡二卡在线观看 | 色视频免费| 久热国产精品 | 亚洲欧洲国产精品 | 国产欧美日韩在线 | 国产一区二区在线播放视频 | 性久久久久久久 | 美女扒开尿口让男人捅爽 | 少妇无码吹潮 | 天堂综合在线 | 午夜亚洲福利在线老司机 | 日美一级片 | 五月天综合色 | 少妇精品久久久久www | 2020国产精品 | 亚洲天堂成人在线观看 | 激情宗合| 国产成人免费片在线观看 | 午夜精品极品粉嫩国产尤物 | 四虎成人网 | 中文字幕色哟哟 | 激情999 | 97狠狠干 | 丁香婷婷六月 | 欧美激情综合 | 熟女人妻一区二区三区免费看 | 黑人高潮一区二区三区在线看 | 一级爱爱片 | 樱花电影最新免费观看国语版 | 欧美性猛交xxxx偷拍洗澡 | 91官网在线观看 | 色多多污 | 97超碰在线免费观看 | 日韩视频在线播放 | 国产精品制服丝袜 | 多啪啪免费视频 | 日本涩涩网| 日产精品久久久久久久 | 久婷婷| 亚洲av无码一区二区三区性色 | 黑人极品ⅴideos精品欧美棵 | 欧美xxx在线观看 | 成人毛片网 | 9999国产精品| 操操操爽爽爽 | 日本在线视频www | 美人被强行糟蹋np各种play | 97色伦97色伦国产欧美空 | 欧美偷拍一区二区 | 木下凛凛子av一区二区三区 | 欧美一区二区三区网站 | 在哪里可以看毛片 | 麻豆射区| 久久夜靖品2区 | 曰本不卡视频 | 四川一级毛毛片 | 午夜在线视频播放 | 天天做天天爱天天做 | 色在线视频 | 免费av电影网址 | 国产在线视频一区 | 鲁在线视频 | 四川操bbb| 奇米婷婷 | 国产二区精品 | 国产精品自拍在线观看 | 亚洲情趣 | 久久久午夜 | 性欧美大战久久久久久久免费观看 | 国产精品成人aaaa在线 | 男女透逼视频 | 日韩精品在线一区 | 日本熟妇人妻中出 | 国产精品国产三级国产a | 色屁屁在线| 日韩av手机在线 | 男人的天堂狠狠干 | 猎艳山村丰满少妇 | 国产精品久久久久久久一区探花 | 日韩一区2区 | 日韩第一页在线 | 亚洲女同一区 | 91精品视频在线 | 五月天婷婷伊人 | 欧美人与性动交g欧美精器 国产在线视频91 | 亚洲破处视频 | 亚洲图片欧美视频 | 国产一级一级 | 国产95在线 | 自拍偷拍亚洲精品 |