首页 > 代码库 > Java优先队列
Java优先队列
按照Java api的说法:
java.util.PriorityQueue.PriorityQueue()
Creates a PriorityQueue
with the default initial capacity (11) that orders its elements according to their natural ordering.
优先队列PriorityQueue的默认排序方式为其中元素的自然顺序。下面利用这一特点,把它当成个小顶堆来求出数组中的前k大元素
package structure;import java.util.Iterator;import java.util.PriorityQueue;import java.util.Queue;/** * Java中的优先队列使用 * @author Dreamy * */public class PriorityQueueDemo { /** * @param args */ public static void main(String[] args) { //Java中的PriorityQueue 默认排序方式为自然顺序 int[] numbers = {4,5,2,1,9,6,8,7}; findTopK(numbers); } //找出数组中top k大 private static void findTopK(int[] numbers) { Queue<Integer> queue = new PriorityQueue<Integer>(); final int k = 3; for(int i=0;i<k;i++) queue.add(numbers[i]); for(int i=k;i<numbers.length;i++){ int min = queue.peek(); if(numbers[i]>min){ queue.poll(); queue.offer(numbers[i]); } } Iterator<Integer> itr = queue.iterator(); while(itr.hasNext()){ int num = itr.next(); System.out.println(num); } }}
当然啦,PriorityQueue中还可以存放自定义的对象,可以让元素对象实现Comparable借口,重写compareTo方法来实现自定义排序。或者,也可以再构造PriorityQueue的时候,指定自定义的比较器Comparator(作为参数)。
另外PriorityQueue是非线程安全的,如果要考虑多线程下的同步问题,可以使用concurrent包下的PriorityBlockingQueue。
Java优先队列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。