【转载保存】java优先队列使用
生活随笔
收集整理的這篇文章主要介紹了
【转载保存】java优先队列使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
PriorityBlockingQueue是一個帶優先級的阻塞隊列,提供了阻塞獲取操作。元素按優先級順序被移除,該隊列也沒有上限(看了一下源碼,PriorityBlockingQueue是對 PriorityQueue的再次包裝,是基于堆數據結構的,而PriorityQueue是沒有容量限制的,與ArrayList一樣,所以在優先阻塞隊列上put時是不會受阻的。雖然此隊列邏輯上是無界的,但是由于資源被耗盡,所以試圖執行添加操作可能會導致 OutOfMemoryError),但是如果隊列為空,那么取元素的操作take就會阻塞,所以它的檢索操作take是受阻的。另外,往入該隊列中的元素要具有比較能力,插入不可比較的對象會拋出 ClassCastException。
iterator() 方法中提供的迭代器并不 保證以特定的順序遍歷 PriorityBlockingQueue 的元素。如果需要有序地進行遍歷,則應使用 Arrays.sort(pq.toArray())。此外,可以使用方法 drainTo 按優先級順序移除全部或部分元素,并將它們放在另一個 collection 中。
package entity;public class People {private Boolean isVIP; //會員private String name;public People(Boolean isVIP, String name) {super();this.isVIP = isVIP;this.name = name;}public Boolean getIsVIP() {return isVIP;}public void setIsVIP(Boolean isVIP) {this.isVIP = isVIP;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "People [isVIP=" + isVIP + ", name=" + name + "]";} } // Priority Queue 優先級隊列@Testpublic void testListPriorityQueue(){People p3 = new People(true,"zjh");People p4 = new People(false,"zy");People p5 = new People(true,"zj");People p6 = new People(false,"zkn");People p7 = new People(true,"zyy");People p8 = new People(false,"znn");People p9 = new People(true,"js");Comparator<People> parator = (p1,p2)->{if(p1.getIsVIP() == true && p2.getIsVIP() == false){return -1;}else if (p1.getIsVIP() == false && p2.getIsVIP() == true){return 1;}else{return 0;}};PriorityBlockingQueue<People> queue = new PriorityBlockingQueue(20,parator);queue.add(p3);queue.add(p4);queue.add(p5);queue.add(p6);queue.add(p7);queue.add(p8);queue.add(p9);/*while(queue.size()>0){System.out.println(queue.remove());}*/List<People> list = new ArrayList<>();// 按順序移除全部元素,并將元素添加到ArrayList中//queue.drainTo(list);// 按順序移除3個元素,并將元素添加到ArrayList中queue.drainTo(list,3);list.stream().forEach(System.out::println);}原文鏈接:https://blog.csdn.net/qq360694660/article/details/80270875
總結
以上是生活随笔為你收集整理的【转载保存】java优先队列使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 递归学习 斐波那契 java代码实现
- 下一篇: SSDB 配置文件详解