1 import java.util.Comparator;
 2 import java.util.PriorityQueue;
 3
 4 /**
 5  * 对集合使用Comparator,不改变对象的自然顺序
 6  * @author Administrator
 7  *
 8  */
 9 public class PriMsgQDemo {
10     public static void main(String[] args) {
11         Message m;
12         //自然顺序排列
13         PriorityQueue<Message> pq = new PriorityQueue<Message>(3);
14
15         pq.add(new Message("Message at main office at 3pm", Message.PLevel.Low));
16         pq.add(new Message("Fire in warehouse!", Message.PLevel.High));
17         pq.add(new Message("Report due Tuesday", Message.PLevel.Medium));
18
19         System.out.println("Message in natural-order priority: ");
20         while((m = pq.poll()) != null){
21             System.out.println(m.msg+"Priority: " + m.priority);
22         }
23         System.out.println();
24         //使用比较器
25         PriorityQueue<Message> pqRev = new PriorityQueue<Message>(3, new RevMsgComparer());
26
27         pqRev.add(new Message("Message at main office at 3pm", Message.PLevel.Low));
28         pqRev.add(new Message("Fire in warehouse!", Message.PLevel.High));
29         pqRev.add(new Message("Report due Tuesday", Message.PLevel.Medium));
30
31         System.out.println("Message in reverse-order priority: ");
32         while((m = pqRev.poll()) != null){
33             System.out.println(m.msg+"Priority: " + m.priority);
34         }
35     }
36 }
37
38 class Message implements Comparable<Message>{
39
40     String msg;
41     enum PLevel {
42         High, Medium, Low
43     }
44
45     PLevel priority;
46     public Message(String str, PLevel pri) {
47         msg = str;
48         priority = pri;
49     }
50
51     @Override
52     public int compareTo(Message o) {
53         return priority.compareTo(o.priority);
54     }
55
56 }
57
58 class RevMsgComparer implements Comparator<Message>{
59
60     @Override
61     public int compare(Message o1, Message o2) {
62         return o2.priority.compareTo(o1.priority);
63     }
64
65 }

转载于:https://www.cnblogs.com/wanghui390/p/3726956.html

对集合使用Comparator相关推荐

  1. Java学习(90)Java集合排序——Comparator接口介绍、案例:对宠物猫分别按名字升序、年龄降序进行排列

    Java集合排序--Comparator接口介绍.案例:对宠物猫分别按名字升序.年龄降序进行排列 Comparator接口介绍 1. Comparator接口: 2. Comparator接口中的co ...

  2. 集合框架-Comparator和Comparable的区别

    Comparator也叫外部比较器,常在使用Collections工具类进行集合排序的时候使用.外部比较器Comparator可以理解为一个专用的比较器,当集合中的对象不支持自比较或者比较的功能不能满 ...

  3. 利用Collections.sort方法重写Comparator接口的compare方法对list集合排序

    Collections.sort()使用该方法实际是重写Comparator接口的compare方法实现排序://传入参数list集合,Comparator接口 T:list的元素类型 //如List ...

  4. Java中的Collection集合以及Collection集合实现类实例

    Collection集合 集合概述 集合的体系特点 Collection集合常用API Collection集合的遍历方式 方式一:迭代器 方式二:foreach/增强for循环 方式三:lambda ...

  5. Java SE基础知识详解第[12]期—集合(Set、Collections、Map、集合嵌套)

    写在前面: 每一个不曾起舞的日子,都是对生命的辜负. 希望看到这里的每一个人都能努力学习,不负韶华,成就更好的自己. 以下仅是个人学习过程中的一些想法与感悟,Java知识博大精深,作为初学者,个人能力 ...

  6. Java进阶(七)Set系列集合、Map集合体系

    七.Set系列集合.Map集合体系 需要学会什么? Set系列集合的特点:Set系列集合的特点和底层原理. 集合工具类Collections:快速的对集合进行元素的添加.排序等操作. 综合案例:把Co ...

  7. JAVA基础加强篇08——集合

    集合概述 集合和数组都是容器. 数组的特点 数组定义完成并启动后, 类型确定.长度固定. 在进行增删数据操作的时候,数组是不太合适的,增删数据都需要放弃原有数组或者移位. 数组适合的场景 当业务数据的 ...

  8. Java程序设计--集合(下)(十三)

    集合 1.Set系列集合 1.1 Set系列集合概述 1.2 HashSet元素无序的底层原理 1.3 HashSet元素去重复的底层原理 1.4 实现类:LinkedHashSet 1.5 实现类: ...

  9. 集合(Set、Collections、Map、集合嵌套)

    目录 Set系列集合 Set系列集合概述 HashSet元素无序的底层原理:哈希表 HashSet元素去重复的底层原理 实现类:LinkedHashSet 实现类:TreeSet Collection ...

最新文章

  1. IOS开发笔记13-Object-C中的NSString
  2. Java枚举原来还能这么用
  3. python的pandas方法_python使用Pandas处理数据的方法
  4. MFC中的消息处理函数
  5. 数据分析学习笔记4-----处理缺失数据
  6. 干货来袭!游戏建模初学者该怎样学习?
  7. MySQL数据库的安装及环境配置
  8. IPv6-IPv4过渡技术详解及配置实例
  9. 6种微服务RPC框架,你知道几个?
  10. jrtplib-2.11.2和jthread-1.3.3编译笔记
  11. A级学科计算机技术,东南大学a类学科排名!附东大a类学科名单
  12. 图文详解PCB生产工艺流程
  13. 用数据告诉你:中国最网红的城市在哪里
  14. GNSS与GPS/北斗指的是什么
  15. 业界最全的iOS包瘦身技术实践总结
  16. DNT精英论坛(暨.NET北京俱乐部)第2期:.NET依赖注入在区块链项目AElf中的实践
  17. python:maya 一个人性化的时间处理库
  18. 研究型论文框架及阅读文献方法
  19. Ubuntu 20.04 系统5分钟后老是自动锁屏怎么取消?
  20. 大数据基础之常用Linux命令

热门文章

  1. 网站的次导航是什么?对网站优化有什么好处?
  2. 网站栏目页要如何进行优化呢?
  3. 网络公司千千万,放心委托看这里!
  4. 搜索引擎蜘蛛为什么对网站不爬行呢?
  5. 微信小程序页面上面的名字怎么改_微信小程序改名方法,小程序名称设置规范...
  6. oracle dbms refresh,oracle 10g中dbms_mview.refresh()函数
  7. python和java和scala_有没有与python3相当的scala/java收藏。国家
  8. java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析
  9. 奔跑吧Linux内核 入门篇(第二版)遇到问题发
  10. Fuzzy C Means 算法及其 Python 实现——写得很清楚,见原文