如题,我用top来提取第一优先的值,但是如果不满意想在保留第一优先值的情况下提取第二优先的值,应该怎么实现?
意思是说,在下次检索的时候还是可以从第一优先值开始,但是这个时候第二优先值已经被移除了
java 优先队列(priority queue)中,提取第二优先级的值并删除,但是不删除第一优先值的数,怎么实现?
答案:2 悬赏:0
解决时间 2021-04-09 07:01
- 提问者网友:放荡不羁
- 2021-04-08 12:56
最佳答案
- 二级知识专家网友:哥在撩妹请勿打扰
- 2021-04-08 14:29
你要的是这样的效果么
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时候会将优先级高的数据先取出,但是同样的,如果加进去是高优先级的数据 下次取的时候它依然还是高优先级的数据。
public static void main(String[] args) {
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时候会将优先级高的数据先取出,但是同样的,如果加进去是高优先级的数据 下次取的时候它依然还是高优先级的数据。
全部回答
- 1楼网友:24K纯糖
- 2021-04-08 15:48
因为你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,不满足循环条件,退出循环
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯