这里写目录标题

  • 1 自然排序Comparable的使用
  • 2 比较器排序Comparator的使用
  • 3 两种比较方式总结

1 自然排序Comparable的使用

  • 案例需求

    • 存储学生对象并遍历,创建TreeSet集合使用无参构造方法
    • 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
  • 实现步骤

    1. 使用空参构造创建TreeSet集合

      • 用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的
    2. 自定义的Student类实现Comparable接口
      • 自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法
    3. 重写接口中的compareTo方法
      • 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
  • 代码实现

    学生类

    public class Student implements Comparable<Student>{private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic int compareTo(Student o) {//按照对象的年龄进行排序//主要判断条件: 按照年龄从小到大排序int result = this.age - o.age;//次要判断条件: 年龄相同时,按照姓名的字母顺序排序result = result == 0 ? this.name.compareTo(o.getName()) : result;return result;}
    }
    

    测试类

    public class MyTreeSet2 {public static void main(String[] args) {//创建集合对象TreeSet<Student> ts = new TreeSet<>();//创建学生对象Student s1 = new Student("zhangsan",28);Student s2 = new Student("lisi",27);Student s3 = new Student("wangwu",29);Student s4 = new Student("zhaoliu",28);Student s5 = new Student("qianqi",30);//把学生添加到集合ts.add(s1);ts.add(s2);ts.add(s3);ts.add(s4);ts.add(s5);//遍历集合for (Student student : ts) {System.out.println(student);}}
    }
    

2 比较器排序Comparator的使用

  • 案例需求

    • 存储老师对象并遍历,创建TreeSet集合使用带参构造方法
    • 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
  • 实现步骤

    • 用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的
    • 比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法
    • 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
  • 代码实现

    老师类

    public class Teacher {private String name;private int age;public Teacher() {}public Teacher(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Teacher{" +"name='" + name + '\'' +", age=" + age +'}';}
    }
    

    测试类

    public class MyTreeSet4 {public static void main(String[] args) {//创建集合对象TreeSet<Teacher> ts = new TreeSet<>(new Comparator<Teacher>() {@Overridepublic int compare(Teacher o1, Teacher o2) {//o1表示现在要存入的那个元素//o2表示已经存入到集合中的元素//主要条件int result = o1.getAge() - o2.getAge();//次要条件result = result == 0 ? o1.getName().compareTo(o2.getName()) : result;return result;}});//创建老师对象Teacher t1 = new Teacher("zhangsan",23);Teacher t2 = new Teacher("lisi",22);Teacher t3 = new Teacher("wangwu",24);Teacher t4 = new Teacher("zhaoliu",24);//把老师添加到集合ts.add(t1);ts.add(t2);ts.add(t3);ts.add(t4);//遍历集合for (Teacher teacher : ts) {System.out.println(teacher);}}
    }
    

3 两种比较方式总结

  • 两种比较方式小结

    • 自然排序: 自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序
    • 比较器排序: 创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序
    • 在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,必须使用比较器排序
  • 两种方式中关于返回值的规则
    • 如果返回值为负数,表示当前存入的元素是较小值,存左边
    • 如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存
    • 如果返回值为正数,表示当前存入的元素是较大值,存右边

java集合-TreeSet排序方式相关推荐

  1. java集合进行排序的两种方式

    java集合的工具类Collections中提供了两种排序的方法,分别是: Collections.sort(List list) Collections.sort(List list,Compara ...

  2. Java集合TreeSet

    TreeSet Set接口的一个实现类 内部采用自平衡的排序二叉树,来存储元素 这样,可以保证集合中没有重复元素 并且,可以对元素进行排序 package bhz.aio;import java.ut ...

  3. Java两种排序方式快慢比较

    2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...

  4. java 集合 自动排序的_java中的自动排序集合 ---- 20160809

    TreeSet的实现: TreeMap实现: 需要注意: 1. 当利用comparator比较两个元素相等时,插入的时候会失败.而hashset是发现两个元素相等时,插入失败返回false.这说明可能 ...

  5. Java的中排序方式

    实体类: public class Person {public String getCode() {return code;}public void setCode(String code) {th ...

  6. java集合对象排序_java ArrayList集合中的某个对象属性进行排序的实现代码

    开发中有时候需要自己封装分页排序时,List如何对某一属性排序呢,分享一个小实例,大家共勉,希望能对大家有用,请多多指教. 1.Student的Bean如下: public class Student ...

  7. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  8. java学习之路8——Java集合框架

    一.什么是集合 概念:对象的容器,定义了对多个对象进行操作的常用方法.可以实现数组的功能. 和数组区别: (1)数组长度固定,集合长度不固定 (2)数组可以存储基本类型和引用类型,集合只能存储引用类型 ...

  9. java treeset比较,java中TreeSet的两种排序比较的方式

    第一种是使得元素具有比较性 第二种是让集合具有比较性 具体代码步骤如下: import java.util.*; /* * TreeSet:可以自动对对集合中的元素进行排序 * 第一种比较方式 * 步 ...

  10. JAVA集合框架之List HashSet去重及TreeSet排序详解

    无图言屌!先上图 说到List去重,很多人都知道用contains()方法,其实contains()方法依据的equals()方法,比较两个对象的引用是否相同,如果要List比较两个自定义定义对象是否 ...

最新文章

  1. 【CV】吴恩达机器学习课程笔记 | 第1-15章
  2. Linux man命令后的参数释义
  3. P5024-保卫王国【动态dp,最小覆盖集】
  4. saml java实现_java-saml
  5. 关于Spring Cloud Commons—普通抽象
  6. 量子计算云平台“中国版”启动 量子信息革命正在加速到来
  7. 软件设计原则(六) 合成复用原则
  8. 《啊哈算法》的Java实现| 第五章:图
  9. 让天之痕窗口化运行!
  10. 软件测试-测试类型分类
  11. Hive集成Tez让大象飞起来
  12. spring boot整合Quartz 在Job类中注入其他对象报空指针异常java.lang.NullPointerException at com.sxt.quartz.QuartzDemo.e
  13. while 循环进入死循环?
  14. 《游戏机制——高级游戏设计技术》一1.1 规则定义游戏
  15. 第 342 场力扣周赛
  16. 用js将二维数组转为json格式字符串
  17. xml中sql的大于号小于号处理
  18. 用python代码查出Excel两列数据的差异并输出
  19. MIMO-OFDM水声通信系统发展现状及趋势
  20. 学员面试vivo手机软件测试职位试题

热门文章

  1. Android xUtils3.0使用手册(二) - 数据库操作
  2. ASP.NET MVC实现网站验证码功能
  3. Activity intent经常使用的 FLAG 集合
  4. 拓端tecdat|电商平台数据解锁网红零食销量密码
  5. 拓端tecdat|Python中用Prophet模型对天气时间序列进行预测与异常检测
  6. 拓端tecdat|R语言高维数据的主成分pca、 t-SNE算法降维与可视化分析案例报告
  7. java jettison_java – 使用Jettison进行JSON解析
  8. RMSE、MAE和SD的基本概念
  9. 遍历文件夹下的所有文件
  10. 基于pycrfsuite和sklearn_crfsuite的命名实体识别NER实战【以CoNLL2002数据集为基准】