今天发现了新大陆。我以前一直以为,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; }
} }
输出为:
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;
}
}
}
输出为:
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
本文分享 CSDN - Big sai。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。