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

如题,我用top来提取第一优先的值,但是如果不满意想在保留第一优先值的情况下提取第二优先的值,应该怎么实现?意思是说,在下次检索的时候还是可以从第一优先值开始,但是这个时... 如题,我用top来提取第一优先的值,但是如果不满意想在保留第一优先值的情况下提取第二优先的值,应该怎么实现?
意思是说,在下次检索的时候还是可以从第一优先值开始,但是这个时候第二优先值已经被移除了
展开
 我来答
秒杀腹黑菟
2014-01-06 · TA获得超过502个赞
知道小有建树答主
回答量:142
采纳率:100%
帮助的人:70.2万
展开全部

你要的是这样的效果么

public static void main(String[] args) {
  PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
  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时候会将优先级高的数据先取出,但是同样的,如果加进去是高优先级的数据 下次取的时候它依然还是高优先级的数据。

每天学点Java
2014-01-06 · TA获得超过5938个赞
知道大有可为答主
回答量:3547
采纳率:0%
帮助的人:1343万
展开全部
不明白你的意思,请问第一优先值跟第二优先值是什么关系,或者直接说他们是不是保存在同一个对象中的
追问
我理解的优先队列是会按优先级的大小排列数值,所以如果输出最上面的则也是说输出优先级最大的即为第一优先级,而我想在保留最上面的值的情况下输出第二上面的并移除~
追答

秒杀腹黑菟已经回答得很好了,

 int a = pq.poll();//将当前的第一级优先的值暂存下来,等第二级优先的值取出后再将其加入
   pq.poll();
   pq.add(a);

这个他代码的精华

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式