我在想,在Java优先级队列中,有没有一个成员函数返回指定的值(根据优先级队列的结构,要么是min,要么是max),而不移除它呢?
public static void main(String[] args){
PriorityQueue<Integer> que = new PriorityQueue<Integer>();
que.offer(3);
que.offer(1);
que.offer(2);
System.out.println(que.remove());
System.out.println(que.remove());
System.out.println(que.remove());
//Instead of removing them directly, I would
//like to see whether the min numbers are greater than, say 2.
//If so, remove them in increment order.
}
使用peek
方法,您可以检查队列头部元素的值,而不将其移除。
http://docs.oracle.com/javase/7/docs/api/java/util/priorityqueue.html#peek()
我定义最大优先级队列如下: 我需要理解这是如何工作的,特别是当1只得到2的索引(而不是4)时? 多谢了。
考虑下面的优先级类声明<代码>类优先级队列 我的想法: 我能想到的一件事是,这将强制优先级队列使用对象比较器,并且不会提供实现其自定义比较器的能力,因为类的用户可能希望基于某个不同的比较器构建队列。
注意:我知道可以用比较器创建优先级队列,然后重复调用Add。
我想通过数组的第二个元素[0,30],[5,10],[15,20]进行比较。 但我得到一个错误如下 第8行:错误:需要数组,但找到了对象PriorityQueue ^2个错误
我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。
我所拥有的是一个类,它创建了一个具有优先级、到达时间和完成时间的对象。我还有许多优先级队列可以将它们放入其中。当我开始时,我将它们放入到达队列中,对它们进行排序,然后查看哪个第一个进入,并将其放入队列中。但是,当我尝试向到达队列添加第二个队列时,它会失败并抛出一个异常。我首先要做的是将所有进程添加到到达队列中,然后对它们进行排序,这样到达时间最短的进程将是到达队列中第一个进入队列的进程。谢谢你帮忙