java优先队列PriorityQueue修改队列内元素排序问题
【摘要】 今天发现了新大陆。我以前一直以为,PriorityQueue队列是基于堆排序的不断更新排序的,没错,它是不断更新排序的。但是前提是要插入(删除)数据,如果仅仅是修改已经稳定队列的值或内容,而不进行插入或者删除,那么,这个顺序是不会变的。 举个例子:
import java.util.Comparator;
import java.util.PriorityQueue;...
- 今天发现了新大陆。我以前一直以为,PriorityQueue队列是基于堆排序的
不断更新排序
的,没错,它是不断更新排序的。但是前提是要插入(删除)数据
,如果仅仅是修改已经稳定队列的值或内容,而不进行插入或者删除,那么,这个顺序是不会变
的。
举个例子:
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
public class BankerClass {
public static void main(String[] args)
{
Queueq1=new PriorityQueue(com);
q1.add(new node(1, 5));
node team=new node(2, 2);
q1.add(team);
q1.add(new node(3, 9));
q1.add(new node(4, 7));
for(node no:q1)
{ System.out.println("id :"+ no.id +" value" +no.value);
}
System.out.println();
team.value=6;//修改了value,按道理不应该在第一,
for(node no:q1)
{ System.out.println("id :" +no.id " value" +no.value);
} }
static Comparatorcom=new Comparator() { @Override
public int compare(node o1, node o2) {//基于value排序 return o1.value-o2.value;
}
};
static class node
{
int id;
int value;
public node(int id,int value)
{
this.value=value;
this.id=id;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
输出为:
id :2 value2
id :1 value5
id :3 value9
id :4 value7
id :2 value6
id :1 value5
id :3 value9
id :4 value7
如果想更新排序,可以这样操作:修改后添加
q1.remove(team);
q1.add(team);
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
public class BankerClass {
public static void main(String[] args)
{
Queueq1=new PriorityQueue(com);
q1.add(new node(1, 5));
node team=new node(2, 2);
q1.add(team);
q1.add(new node(3, 9));
q1.add(new node(4, 7));
for(node no:q1)
{ System.out.println("id :"+ no.id+ " value" +no.value);
}
System.out.println();
team.value=6;//修改了value,按道理不应该在第一,
q1.remove(team);
q1.add(team);
for(node no:q1)
{ System.out.println("id :"+ no.id " value"+ no.value);
} }
static Comparatorcom=new Comparator() { @Override
public int compare(node o1, node o2) {//基于value排序 return o1.value-o2.value;
}
};
static class node
{
int id;
int value;
public node(int id,int value)
{
this.value=value;
this.id=id;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
输出为:
id :2 value2
id :1 value5
id :3 value9
id :4 value7
id :1 value5
id :2 value6
id :3 value9
id :4 value7
当然有多个如果你也可以添加一个新的node肯定排在第一的,然后poll出去也可以。这样就可以保证优先队列的数据是最新的。
如果对后端、爬虫、数据结构算法
等感性趣欢迎关注我的个人公众号交流:bigsai
文章来源: bigsai.blog.csdn.net,作者:Big sai,版权归原作者所有,如需转载,请联系作者。
原文链接:bigsai.blog.csdn.net/article/details/84646398
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)