Comparator有两种实现方式:

1,匿名内部类
2,创建一个类用于实现Comparator,该类创建的对象就是比较器

Person类

public class Person implements Comparable<Person> {private String name;private String sex;private int age;private Book books;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Book getBooks() {return books;}public void setBooks(Book books) {this.books = books;}@Overridepublic String toString() {return "Person [name=" + name + ", sex=" + sex + ", age=" + age + ", books.name=" + books.getBookName() + ", books.price=" + books.getPrice() + "]";}public Person(String name, String sex, int age, Book books) {super();this.name = name;this.sex = sex;this.age = age;this.books = books;}public Person() {super();}}

Book类

package Homework3;public class Book {//Book类中 有  书名,书的价格private String bookName;private int price;public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}@Overridepublic String toString() {return "Book [bookName=" + bookName + ", price=" + price + "]";}public Book(String bookName, int price) {super();this.bookName = bookName;this.price = price;}public Book() {super();}}

Comparator实现–匿名内部类

public class Test {public static void main(String[] args){//ComparatorTreeSet<Person> set2=new TreeSet<>(new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {if(o1.getAge()>o2.getAge()){return -1;}else if (o1.getAge()<o2.getAge()) {return 1;}else {CollationKey key=Collator.getInstance().getCollationKey(o1.getName());CollationKey key2=Collator.getInstance().getCollationKey(o2.getName());int n=key.compareTo(key2);if(n>0){return 1;}else if (n<0) {return -1;}else {int a=o1.getBooks().getPrice()-o2.getBooks().getPrice();if(a>0){return -1;}else if (a<0) {return 1;}else {CollationKey key3=Collator.getInstance().getCollationKey(o1.getBooks().getBookName());CollationKey key4=Collator.getInstance().getCollationKey(o2.getBooks().getBookName());int m=key3.compareTo(key4);if(m>0){return 1;}else if (m<0) {return -1;}else {return 0;}}}}}});
//          第一条件: 年龄 降序set2.add(new Person("Jane1", "female", 20, new Book("z指环王", 30)));set2.add(new Person("Jane2", "female", 30, new Book("z指环王", 30)));
//            第二条件: 姓名升序set2.add(new Person("Ada3", "female", 30, new Book("z指环王", 30)));
//            第三条件: 书的价格   降序set2.add(new Person("Ada4", "female", 30, new Book("z指环王", 50)));
//            第四条件: 书名     升序set2.add(new Person("Ada5", "female", 30, new Book("m指环王", 50)));System.out.println(set2);}
}

TreeSet集合排序方式二:定制排序Comparator相关推荐

  1. 《spark技术应用》课程期末考试大作业报告,使用eclipse完成求top值、文件排序、二次排序三个程序的个性化开发。

    ​​​​目录 一.选题的目的及要求... 4 二.设计思路... 4 三.主要内容及关键技术.. 5 四.制作步骤... 5 1.准备工作... 5 1.1在VMware中安装一台Ubuntu64位系 ...

  2. 计算机怎么进行排名,电脑排序方式怎么自由排序

    电脑排序方式设置自由排序的方法如下: 1.在桌面单击鼠标右键,并在出现的对话框中点击查看. 2.然后点击自动排列图标即可. 电脑桌面是指打开计算机并成功登录系统之后看到的显示器主屏幕区域,是计算机用语 ...

  3. Mapreduce的排序、全排序以及二次排序

    一:背景 Hadoop中虽然有自动排序和分组,由于自带的排序是按照Key进行排序的,有些时候,我们希望同时对Key和Value进行排序.自带的排序功能就无法满足我们了,还好Hadoop提供了一些组件可 ...

  4. python列表字母排序_Python_list(二)列表排序

    list排序 按字母顺序排序 sort() .sort() 按字母排序,再也无法恢复到原来的排列顺序 示范 >>> name = ['congcong', 'yuxi', 'jing ...

  5. 常见的排序算法二——希尔排序

    原理:被称为增量缩小排序.先将序列按增量划分为元素个数相同的若干组, 使用直接插入排序法进行排序,然后不断缩小增量直至为1, 最后使用直接插入排序完成排序. 要点:增量的选择以及排序最终以1为增量进行 ...

  6. c语言排序算法_C语言写排序算法(二) —— 选择排序

    上次联系的算法是冒泡排序,不知道小伙伴们还记得不,中间穿插了一下比特币相关的分享,嘿嘿.今天来分享一下选择排序. 算法描述:选择排序是从数组中选择最大(小)的元素放到数组的最后一个,然后往前移,接着从 ...

  7. 排序算法(二)--选择排序法

    约定: 假设数据中有n个数据元素(关键字).排列算法中,将序列中各关键字值依次存放于类型为keytype的数组元素K[1], K[2], K[3], -, K[n]中. 排序结果按照数据元素(关键字) ...

  8. c++语言编程希尔排序法排序,经典四讲贯通C++排序之二 希尔排序

    我们都知道C++排序方法中,有四种常用方法插入排序.希尔排序.交换排序以及选择排序.上一篇文章,我们介绍了插入排序,今天我们介绍另一种排序方法――希尔排序.(本系列文章统一 测试程序) 希尔排序 前面 ...

  9. Java Set接口详细讲解 TreeSet的定制排序和自然排序

    Set接口概述 Set接口是Collection的子接口,set接口没有提供额外的方法 Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个Set 集合中,则添加操作失败. Set 判断 ...

最新文章

  1. apache php 执行shell,PHP执行普通shell命令流程解析
  2. 如何构建一个理想UI代码表达的自动化工具?
  3. 工作289:js取整
  4. 批量替换 MySQL 指定字段中的字符串
  5. python如何读取tfrecord_tensorflow将图片保存为tfrecord和tfrecord的读取方式
  6. 关于NSArray使用时用strong修饰还是copy修饰问题测试
  7. 将应用制作成镜像发布到服务器k8s上作为容器微服务运行。
  8. Android Studio实现通讯录项目
  9. OpenOffice.org 2.0已经发布了。
  10. 求多个数最小公倍数的一种变换算法
  11. 霍尔增量式编码器左右车轮线速度的计算
  12. C语言数组排序——选择排序
  13. 映目云摄影以人脸识别惊艳Party现场,比亚迪元EV周年庆生
  14. 【数据库】对象名称 'dbo.student' 和索引名称 'stusage' 有重复的键
  15. https SSL协议详解
  16. 数字IC设计工程师成长之路
  17. android开发的超级玛丽游戏
  18. 基于51单片机的篮球计时计分器仿真原理图PCB方案设计
  19. WPS word 如何取消定义网格线?无法修改行间距如何解决?
  20. 截图神器-snipaste

热门文章

  1. 语义分析的一些方法(上篇)
  2. XGBoost Plotting API以及GBDT组合特征实践
  3. Hyperledger Fabric 智能合约实战 (5) sdk node软件安装
  4. armv8-M(cortex-m) Trustzone总结和介绍
  5. [ARM-assembly]-Thumb指令集快速参考卡
  6. linux kernel中的中断处理流程
  7. openssl aes加解密的使用
  8. (47)逆向分析 KiSystemService 函数填充 _KTRAP_FRAME 部分
  9. WIN10+MinGW中文输出乱码的解决方法
  10. 2020-11-28(全局变量和局部静态变量)