package com.henu.jihe;import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;public class Demo03_比较器 {public static void main(String[] args) {Book b1 = new Book("AI时代我们应该做些什么",109,"清华大学出版社","李孟冬");Book b2 = new Book("AI会毁灭人类吗?",99,"河南大学出版社","李孟冬");Book b3 = new Book("AI来临前的人性思考",79,"人民出版社","李孟冬");Book b4 = new Book("这本就是一首爱你的诗",59,"清华大学出版社","李孟冬");Book b5 = new Book("java的大发展",80,"清华大学出版社","李孟冬");Set<Book> ts = new TreeSet<Book>();ts.add(b1);ts.add(b2);ts.add(b3);ts.add(b4);ts.add(b5);for (Book book : ts) {System.out.println(book.toString());}}
}class Book implements Comparable<Book>{private String name;private int price;private String press;//出版社private String author;public Book() {}public Book(String name, int price, String press, String author) {this.name = name;this.price = price;this.press = press;this.author = author;}@Overridepublic String toString() {return "Book [name=" + name + ", price=" + price + ", press=" + press + ", author=" + author + "]";}@Overridepublic int compareTo(Book o) {return this.price - o.price;}}
package com.henu.jihe;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Demo03_01 {public static void main(String[] args) {Book2 b1 = new Book2("AI时代我们应该做些什么",109,"清华大学出版社","李孟冬");Book2 b2 = new Book2("AI会毁灭人类吗?",99,"河南大学出版社","李孟冬");Book2 b3 = new Book2("AI来临前的人性思考",79,"人民出版社","李孟冬");Book2 b4 = new Book2("这本就是一首爱你的诗",59,"清华大学出版社","李孟冬");Book2 b5 = new Book2("java的大发展",80,"清华大学出版社","李孟冬");List<Book2> list = new ArrayList<Book2>();list.add(b1);list.add(b2);list.add(b3);list.add(b4);list.add(b5);Collections.sort(list, new MyComparator());for (Book2 book : list) {System.out.println(book.toString());}}
}
class MyComparator implements Comparator<Book2>{@Overridepublic int compare(Book2 o1, Book2 o2) {return o1.getPrice() - o2.getPrice();}
}
class Book2{private String name;private int price;private String press;//出版社private String author;public Book2() {}public Book2(String name, int price, String press, String author) {this.name = name;this.price = price;this.press = press;this.author = author;}@Overridepublic String toString() {return "Book [name=" + name + ", price=" + price + ", press=" + press + ", author=" + author + "]";}public String getName() {return name;}public int getPrice() {return price;}public String getPress() {return press;}public String getAuthor() {return author;}}
package com.henu.jihe;import java.util.TreeSet;/** 4.设计一个程序,使用TreeSet集合存储Student类对象,
* Student类包含name、age、score三个属性,(10)
* 要求设计一个测试类,完成
* 增加学生
* 排序行为:对姓名进行升序排序,如果姓名一样,对年龄进行降序排序,如果年龄一样,对成绩进行升序排序。
* 【注】如果把一个对象添加到TreeSet集合,\
* 则该对象必须实现Comparable接口,否则程序会抛出ClassCastException异常。*/
public class Demo03_02 {public static void main(String[] args) {TreeSet<Student2> ts  = new TreeSet<>();ts.add(new Student2("LMD",18,16));ts.add(new Student2("AZS",16,98));ts.add(new Student2("AZS",20,36));ts.add(new Student2("AZS",20,80));ts.add(new Student2("WWW",16,100));for (Student2 o : ts){System.out.println(o.toString());}}
}class Student2 implements Comparable<Student2>{private String name;private   int age;private int score;public Student2() {}public Student2(String name, int age, int score) {this.name = name;this.age = age;this.score = score;}public String getName() {return name;}public int getAge() {return age;}public int getScore() {return score;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";}@Override//对姓名进行升序排序,如果姓名一样,对年龄进行降序排序,如果年龄一样,对成绩进行升序排序。public int compareTo(Student2 o) {if (this.getName().compareTo(o.getName()) == 0) {if (this.getAge() == o.getAge()) {return this.getScore() - o.getScore();}return o.getAge() - this.getAge();}return this.getName().compareTo(o.getName());}
}
package com.henu.jihe;import java.util.Comparator;
import java.util.TreeSet;public class Demo03_04 {public static void main(String[] args) {TreeSet<Student4> ts  = new TreeSet<>(new MyComparator3());ts.add(new Student4("LMD",18,16));ts.add(new Student4("AZS",16,98));ts.add(new Student4("AZS",20,36));ts.add(new Student4("AZS",20,80));ts.add(new Student4("WWW",16,100));for (Student4 o : ts){System.out.println(o.toString());}}
}class MyComparator3 implements Comparator<Student4>{@Overridepublic int compare(Student4 o1, Student4 o2) {if (o1.getName().compareTo(o2.getName()) == 0) {if (o1.getAge() == o2.getAge()) {return o1.getScore() - o2.getScore();}return o1.getAge() - o1.getAge();}return o1.getName().compareTo(o2.getName());}}class Student4{private String name;private    int age;private int score;public Student4() {}public Student4(String name, int age, int score) {this.name = name;this.age = age;this.score = score;}public String getName() {return name;}public int getAge() {return age;}public int getScore() {return score;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";}
}

如果你又兴趣,你也可以试试,两个方法的输出值不一样,第二种去掉了名字重复的值

而更加有趣的一个地方在于自平衡二叉树,其实还是数据结构不好的问题。。。

package com.henu.jihe;import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;public class Demo03_测试 {public static void main(String[] args) {Dog dog1 = new Dog("lib",1);Dog dog2 = new Dog("asd",2);Dog dog3 = new Dog("eer",3);Dog dog4 = new Dog("tom",4);Dog dog5 = new Dog("lib",1);Set<Dog> hSet = new TreeSet<>(new comparatorDog());hSet.add(dog1);hSet.add(dog2);hSet.add(dog3);hSet.add(dog4);hSet.add(dog5);for (Dog dog : hSet) {System.out.println(dog);}}
}class comparatorDog implements Comparator<Dog>{@Overridepublic int compare(Dog o1, Dog o2) {if (o1.getId() == o2.getId()) {return 0;}else{return 1;}//        return o1.getId() - o2.getId();
//      return o1.getName().compareTo(o2.getName());}}class Dog{private String name;private int id;public Dog() {super();// TODO Auto-generated constructor stub}public Dog(String name, int id) {super();this.name = name;this.id = id;}public int getId() {return id;}public String getName() {return name;}@Overridepublic String toString() {return "Dog [name=" + name + ", id=" + id + "]";}}

java基础---关于比较器Comparator和Comparable相关推荐

  1. JAVA两类比较器的区别(Comparable,Comparator)

    内部比较器Comparable 一个类实现了Comparable接口,那么它就有了一个内部比较器,实现了Comparable的类可以调用Collections工具类或Arrays的sort方法进行比较 ...

  2. java比较器Comparator 和 Comparable 的区别

    算了还是给个链接吧 他写的比我的好https://www.cnblogs.com/zyaizz/p/3605103.html https://blog.csdn.net/u012289441/arti ...

  3. 判断比较器Comparator和Comparable的升序降序问题

    比较器 降序升序问题 Comparator中的compare方法 //升序排序 public int compare(int o1, int o2) {return o1 - o2; }//降序排序 ...

  4. Thinking in java基础之集合框架

    Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...

  5. java把map值放入vector_Thinking in java基础之集合框架

    Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...

  6. Comparator 和 Comparable的使用及区别

    这里写目录标题 Comparable的使用 Comparator比较器 Comparator和Comparable的区别 Comparable的使用 1.1.我们创建一个Student(学生)类 cl ...

  7. JAVA语言-比较器Comparator(java中Comparable和Comparator的区别)

    文章目录 一.什么是Comparator 二.Java compare方法和compareTo方法 三.java中Comparable和Comparator的区别 Comparator的例子 三.de ...

  8. Java 对象排序 Comparable接口和比较器Comparator的使用

    我这里使用的是Treeset存储的学生信息,定义了学生类,对学生信息进行一个排序: 方法一 对象排序的的方法是,让元素所属类实现 Comparable 接口 ,重写 comparaTo(To) 方法 ...

  9. Java基础知识 21(Set集合,HashSet集合以及它的三种遍历方式(迭代器,增强for循环,forEach),LinkedHashSet集合,TreeSet集合(自然排序法,比较器排序法))

    Java基础知识 21 Set集合 Set集合:一个不包含重复元素的Collection集合,元素不重复,List集合是允许元素重复的. Set接口的三个字类:HashSet(),LinkedHash ...

最新文章

  1. 点云python-pcl
  2. nagios报警的问题
  3. YOLOv3 《YOLOv3: An Incremental Improvement》论文笔记
  4. c/c++的全局变量
  5. 深入理解javascript原型链
  6. 配置Struts2的异常处理
  7. Error:The module 'app' is an Android project without build variants, and cannot be built.
  8. 随笔--四个月培训小结
  9. VS对.ini文件的操作
  10. 无线路由服务器蹭网,让别人知道wifi密码也无法蹭网的办法
  11. MyEclipse使用总结——在MyEclipse中新建Maven框架的web项目[转]
  12. 分镜头剧本模板、故事图模板
  13. 最后一个道士 第二章
  14. winform 图像处理
  15. 计算机主机结构和名称图,计算机结构图
  16. Roxe:大涨时毅然销毁99% ROC 专注解决跨境汇款难题
  17. 记录微信支付解密错误Tag mismatch
  18. windows server 2003 网络操作系统项目教程 特制版
  19. cgb2107-day07
  20. 微信小程序 获取手机号 JavaScript解密示例代码详解

热门文章

  1. HDU多校7 - 6850 Game(博弈+思维+贪心)
  2. CodeForces - 1323C Unusual Competitions(贪心)
  3. POJ2762(判断无向图的弱连通)
  4. CreatePipe匿名管道通信
  5. cocos2d-x游戏实例(12)-实时拖动主角移动
  6. ADO学习(四)ADO扩展IADORecordBinding
  7. 悲报, GIF 之父因新冠去世
  8. Netty学习笔记(四)EventLoopGroup续篇
  9. Linux 操作系统太难?先爬过这 6 个陡坡
  10. 语音视频社交背后技术深度解析