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