-
今天发现了新大陆。我以前一直以为,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源创计划”,欢迎正在阅读的你也加入,一起分享。