java 优先队列(priority queue)中,提取第二优先级的值并删除,但是不删除第一优先值的数,怎么实现?
如题,我用top来提取第一优先的值,但是如果不满意想在保留第一优先值的情况下提取第二优先的值,应该怎么实现?意思是说,在下次检索的时候还是可以从第一优先值开始,但是这个时...
如题,我用top来提取第一优先的值,但是如果不满意想在保留第一优先值的情况下提取第二优先的值,应该怎么实现?
意思是说,在下次检索的时候还是可以从第一优先值开始,但是这个时候第二优先值已经被移除了 展开
意思是说,在下次检索的时候还是可以从第一优先值开始,但是这个时候第二优先值已经被移除了 展开
展开全部
你要的是这样的效果么
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时候会将优先级高的数据先取出,但是同样的,如果加进去是高优先级的数据 下次取的时候它依然还是高优先级的数据。
展开全部
不明白你的意思,请问第一优先值跟第二优先值是什么关系,或者直接说他们是不是保存在同一个对象中的
追问
我理解的优先队列是会按优先级的大小排列数值,所以如果输出最上面的则也是说输出优先级最大的即为第一优先级,而我想在保留最上面的值的情况下输出第二上面的并移除~
追答
秒杀腹黑菟已经回答得很好了,
int a = pq.poll();//将当前的第一级优先的值暂存下来,等第二级优先的值取出后再将其加入
pq.poll();
pq.add(a);
这个他代码的精华
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询