java 优先队列(priority queue)中,提取第二优先级的值并删除,但是不删除第一优先值的数,怎么实现?

2025-01-25 08:37:31
推荐回答(2个)
回答1:

你要的是这样的效果么

public static void main(String[] args) {
  PriorityQueue pq = new PriorityQueue();
  pq.add(5);
  pq.add(2);
  pq.add(3);
  pq.add(4);
  System.out.println("取出了"+pq.poll()+",队列剩余"+Arrays.toString(pq.toArray()));
  
  /**
   * 假设3是我不满意的值,我要取到3后面的值
   */
  if(pq.peek()==3){
   System.out.println("3真不是我想要的,我可以接着往下处理么?ok,将3先保留吧");
   int a = pq.poll();//将当前的第一级优先的值暂存下来,等第二级优先的值取出后再将其加入
   pq.poll();
   pq.add(a);
   System.out.println("队列剩余"+Arrays.toString(pq.toArray()));
  }
  
  System.out.println("取出了"+pq.poll()+",队列剩余"+Arrays.toString(pq.toArray())); 
  
 }

打印效果:

取出了2,队列剩余[3, 4, 5]
3真不是我想要的,我可以接着往下处理么?ok,将3先保留吧
队列剩余[3, 5]
取出了3,队列剩余[5]

 

我觉得这个是优先队列,虽然poll时候会将优先级高的数据先取出,但是同样的,如果加进去是高优先级的数据 下次取的时候它依然还是高优先级的数据。

回答2:

不明白你的意思,请问第一优先值跟第二优先值是什么关系,或者直接说他们是不是保存在同一个对象中的