当前位置: 首页 > 知识库问答 >
问题:

java优先级队列中的成员函数返回但未移除指定值?

淳于飞文
2023-03-14

我在想,在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.
}

共有1个答案

龚睿
2023-03-14

使用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)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • 我所拥有的是一个类,它创建了一个具有优先级、到达时间和完成时间的对象。我还有许多优先级队列可以将它们放入其中。当我开始时,我将它们放入到达队列中,对它们进行排序,然后查看哪个第一个进入,并将其放入队列中。但是,当我尝试向到达队列添加第二个队列时,它会失败并抛出一个异常。我首先要做的是将所有进程添加到到达队列中,然后对它们进行排序,这样到达时间最短的进程将是到达队列中第一个进入队列的进程。谢谢你帮忙