参考priority_queue的文档后,我们可以借用std::function来实现一个更加通用可读性更好的的comparator。 #include <iostream> #include <queue> #include <functional> using namespace std; // 将priority_queue的第三个参数穿进去一个function对象。 typedef priority_queue<int, vector<int>, std::function<bool(...
根据优先队列的特点,很容易想到:可以直接利用二叉堆作为优先队列的底层实现 publicclassPriorityQueue<E>{privateBinaryHeap<E>heap;publicPriorityQueue(Comparator<E>comparator){heap=newBinaryHeap<>(comparator);}publicPriorityQueue(){this(null);}publicintsize(){returnheap.size();}publicbooleanisEmpty(){returnhe...
publicvoidusePriorityQueueWithComparator(){ PriorityQueue<Integer>integerQueue=newPriorityQueue<>((a,b)->b-a); integerQueue.add(1); integerQueue.add(3); integerQueue.add(2); intfirst=integerQueue.poll(); intsecond=integerQueue.poll(); intthird=integerQueue.poll(); log.info("{},{},{}",...
PriorityQueue(int initialCapacity, Comparator<? super E> comparator) PriorityQueue(PriorityQueue<? extends E> c) PriorityQueue(SortedSet<? extends E> c) PriorityQueue() PriorityQueue(Collection<? extends E> c) PriorityQueue(int initialCapacity) PriorityQueue(int initialCapacity, Comparator<? super E> comp...
comparator the comparator that will be used to order this * priority queue. If {@code...
int second = integerQueue.poll(); int third = integerQueue.poll(); log.info("{},{},{}",first,second,third); } } 默认情况下会按照升序排列,第二个例子中我们传入了一个逆序的Comparator,则会按照逆序排列。 PriorityBlockingQueue PriorityBlockingQueue是一个BlockingQueue,所以它是线程安全的。
if( a.x== b.x ) return a.y> b.y; return a.x> b.x; } }; http://blog.csdn.net/sraing/article/details/6256302 Java PriorityQueue<Cell> queue =newPriorityQueue<>(1,newComparator<Cell>(){publicintcompare(Cell a, Cell b) {returna.height - b.height; } });...
PriorityBlockingQueue有四个构造方法,其余两个最后都会调用上图的构造器。输入参数initialCapacity和comparator分别是队列的初始容量和队列中对象的比较器。初始容量默认为11。比较器默认为null。lock和notEmpty用于线程同步。 2.offer 所有往队列中加入元素的方法最后都会调用offer方法。
Returns the comparator used to order the elements in this queue, or null if this queue uses the Comparable natural ordering of its elements.
//自定义比较器,降序排列staticComparator<Integer>cmp=newComparator<Integer>(){publicintcompare(Integere1,Integere2){returne2-e1;}};publicstaticvoidmain(String[]args){//不用比较器,默认升序排列Queue<Integer>q=newPriorityQueue<>();q.add(3);q.add(2);q.add(4);while(!q.isEmpty()){System.out...