中易网

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

答案:2  悬赏:0  
解决时间 2021-04-09 07:01
如题,我用top来提取第一优先的值,但是如果不满意想在保留第一优先值的情况下提取第二优先的值,应该怎么实现?

意思是说,在下次检索的时候还是可以从第一优先值开始,但是这个时候第二优先值已经被移除了
最佳答案
你要的是这样的效果么
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()));

  
  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时候会将优先级高的数据先取出,但是同样的,如果加进去是高优先级的数据 下次取的时候它依然还是高优先级的数据。
全部回答
因为你poll之后,你的pq.size()的值是会改变的, j=0时,pq.size()=5,输出了9 j=1,pq.size()=4,输出了11 j=2,pq.size()=3,输出了12 j=3,pq.size()=2,不满足循环条件,退出循环
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
股东向高管低价转让股权属于股份支付吗
TCL免污式滚筒洗衣机相比传统洗衣机优势在哪
车美家汽车美容中心地址在什么地方,想过去办
为什么我觉得纷享销客这样类似的软件对我们做
老公怀疑第一次没给他一直抓住不放,该不该离
清洗打印头 越来越模糊
深圳市南山区安全主任培训在哪里
dota2网页steam过了安全令牌时间还是交易不了
如何复制网站地址?
ubuntu kylin14.04安装
红烧牛肉地址在什么地方,想过去办事
我有点不敢直视异性眼睛,怎么破,本人男
两种精华能同时用吗?
苏州北汽车站离哪个火车站近
这种鞋除了叫一脚蹬,还叫什么
推荐资讯
excel表格,帮我看看 用什么函数 在一列中的
曼秀雷敦乐肤洁抗痘痘护理爽肤液有用吗?谢谢
河北工程大学转系
用360重装系统后连不上wifi
住房公积金重置密码
作文我想要翅膀400百字
惠普(HP) ENVY 14-j004TX 笔记本安装软件字
装修贷款最长还款时间是多久,可以分多少年还
商标左上角的R是什么意思
草莓酱可以用来做什么吃的【表太难】
win7启动出现0xc000000d
足球掷界外球时防守队员的后退距离
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?