java优先队列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() {@Overridepublic 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() {@Overridepublic 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
java优先队列PriorityQueue修改队列内元素排序问题相关推荐
- java 中PriorityQueue优先级队列使用方法
1.前言 优先级队列是不同于先进先出队列的另一种队列.每次从队列中取出的是具有最高优先权的元素. PriorityQueue是从JDK1.5开始提供的新的数据结构接口. 如果想实现按照自己的意愿进行优 ...
- java中PriorityQueue优先级队列使用方法
优先级队列是不同于先进先出队列的另一种队列.每次从队列中取出的是具有最高优先权的元素. PriorityQueue是从JDK1.5开始提供的新的数据结构接口. 如果不提供Comparator的话,优先 ...
- java优先队列 PriorityQueue详解(附图)
文章目录 前言 一.概念及应用场景 二.原理及源码分析 1. 了解继承图 2. 优先队列的插入 总结 前言 最近接触到优先队列的题目,正好趁这个机会复习一下优先队列,并深入了解一下源码. 一.概念及应 ...
- java优先队列PriorityQueue
文章目录 前言 PriorityQueue 优先队列 java中优先队列的声明 按优先级排序 常见方法 private void grow(int minCapacity) public boolea ...
- Java之PriorityQueue有序队列
转自:https://baijiahao.baidu.com/s?id=1665383380422326763&wfr=spider&for=pc 最近在刷力扣题的时候不止一次看到过这 ...
- 【Java方法】统计数组内不同元素个数及每个元素的数量
[Java方法]统计数组内元素的种类数及每种元素的数量 1.统计数组内元素的种类数 2.统计数组内每种元素的数量 我们假定一个一维数组 a={1,2,3,2,2,3,1,3,2,1,2,3,1,2,1 ...
- c语言优先队列对数组的排序,优先队列+sort+栈+队列讲解
队列我们都知道,是一种先进后出的数据结构. 队列的基本操作http://blog.csdn.net/qq_32680617/article/details/50822430 而优先队列是把队列内部的数 ...
- java优先队列的入队函数_Java内置的优先队列PriorityQueue
PriorityQueue是Java内置的优先队列,每次取出来的元素是最小的.PriorityQueue可以做到自动扩容.PriorityQueue中的对象必须是可比较的. 例如,最简单的情况,在Pr ...
- java先进先出 循环队列,JavaScript队列、优先队列与循环队列
队列是一种遵从先进先出(FIFO)原则的有序集合 队列在尾部添加新元素,从顶部移除元素 队列的理解 队列在我们生活中最常见的场景就是排队了 队列这个名字也已经很通俗易懂了 和栈很像,这不过队列是先入先 ...
最新文章
- java+long.builder_Java LongStream.Builder accept()用法及代码示例
- 厦门计算机高级职称,2021年厦门工程师职称属于哪种职称?
- MIT华人博士研究新冠遭学术霸凌!斯坦福诺奖得主:“你论文少,别说话!”...
- Expandable Input Toolbar
- python3 拼接字符串的7种方法
- solrj的使用,环境准备,工程搭建,索引创建,添加\修改索引,删除索引,查询
- C语言 浅谈可变参数
- python Lambda 表达式
- java线程跟多线程
- linux从表中提取信息,如何用Linux命令提取表格文本中的某列
- 使用本地计划任务定时关闭azure虚拟机
- Google与GitHub 结盟,为保护软件供应链而战
- Vijos P1127 级数求和【数列】
- minimax算法(井子棋)
- 【FICO】标准成本、计划成本、实际成本、目标成本
- m1MacBook Pro pycharm打字卡顿问题解决
- Java笔记——反射常用方法
- POI设置和读取excel分组信息,多级分组设置
- 2021年中国智能驾驶行业研究报告
- vue循环jq渲染网页页面