【TreeSet集合】比较器排序Comparator的使用

这篇具有很好参考价值的文章主要介绍了【TreeSet集合】比较器排序Comparator的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

比较器排序Comparator的使用

  • 存储学生对象并遍历,创建TreeSet集合使用带参构造方法

  • 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序

    创建学生类:

    package com.gather.set.treeset;
    public class Student1 {
        private String name;
        private int age;
        public Student1() {
        }
        public Student1(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;
        }
    }
    

    测试类:

    package com.gather.set.treeset;
    import java.util.Comparator;
    import java.util.TreeSet;
    public class TreeSetDemo03 {
        public static void main(String[] args) {
            TreeSet<Student1> ts = new TreeSet<Student1>(new Comparator<Student1>() {  //传递比较器接口
                @Override
                public int compare(Student1 s1, Student1 s2) {
                    int num = s1.getAge() - s2.getAge();//调方法访问成员变量值
                    int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
                    return num2;
                }
            });
            Student1 s1 = new Student1("xishi", 29);
            Student1 s2 = new Student1("wangzhaojun", 28);
            Student1 s3 = new Student1("diaochan", 30);
            Student1 s4 = new Student1("yangyuhuan", 33);
            Student1 s5 = new Student1("lisi", 33);
            //把学生添加到集合
            ts.add(s1);
            ts.add(s2);
            ts.add(s3);
            ts.add(s4);
            ts.add(s5);
            //遍历
            for (Student1 s : ts) {
                System.out.println(s.getName() + "," + s.getAge());
            }
        }
    }
    

【TreeSet集合】比较器排序Comparator的使用

使用比较器进行排序在创建TreeSet集合时要传递Comparator的实现类对象,重写compare()方法,根据返回值进行排序。在compare方法体里面使用对象调方法访问成员变量比较年龄是否相同(返回值为0),不能直接访问私有成员变量。当年龄相同时按照姓名的字母进行排序,如果不相同就直接按照年龄升序返回。

  • 两种比较方式总结
    • 自然排序:自定义类要实现Comparatable接口,重写comparaTo方法,根据返回值进行排序
    • 比较器排序:创建TreeSet集合时要传递Comparator的实现类对象,重写compare(T o1,T o2)方法,根据返回值进行排序

注意:在重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写文章来源地址https://www.toymoban.com/news/detail-473532.html

到了这里,关于【TreeSet集合】比较器排序Comparator的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java入门8(Comparator比较器,HashMap)

    ​Comparator不同于Comparable,使用更加的灵活,可以在不同场景下使用比较器,实际开发中,更推荐comparator比较器 Set接口常用实现类 三个常用实现类:TreeSet(基于Java红黑树,底层map),HashSet(哈希表,底层map),LinkedHashSet() Set特点: 不允许存储重复元素 没有索引,不能

    2024年02月04日
    浏览(40)
  • 【数据结构Java版】对象的比较之Comparable与Comparator比较器

    目录   一、基本类型的比较 二、对象类型的比较 (1)对象类型比较出现的问题 (2)重写基类equals方法 (3)基于Comparable接口的比较 1.实现Comparable接口,重写compareTo方法 (4)基于Comparator比较器的比较 1.用户自定义比较器类,实现Comparator接口 2.覆写Comparator中的compare方法

    2024年01月25日
    浏览(58)
  • 剑指 Offer 45. !!把数组排成最小的数(使用比较器的定制排序;快速排序)

    剑指 Offer 45. 把数组排成最小的数 中等 662 相关企业 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 示例 1: 输入: [10,2] 输出: “102” 示例 2: 输入: [3,30,34,5,9] 输出: “3033459” 这道题在左程云算法课上讲过,但是这次

    2024年02月14日
    浏览(41)
  • C#使用自定义的比较器对版本号(编码)字符串进行排序

    给定一些数据,如下所示: “1.10.1.1.1.2”, “1.1”, “2.2”, “1.1.1.1”, “1.1.3.1”, “1.1.1”, “2.10.1.1.1”, “1.1.2.1”, “1.2.1.1”, “2.5.1.1”, “1.10.1.1”, “1.10.2.1”, “1.11.3.1”, “1.11.12.1”, “1.11.11.1”, “1.11.3.1”, “1”, “1.1.1.1.1”, “1.1.1.1.1.1” 实现效果: 按照每个节点层

    2024年02月11日
    浏览(40)
  • 使用java.lang.Comparable实现比较器和使用java.util.Collections排序

    记录 :469 场景 :使用java.lang.Comparable实现比较器,使用java.util.Collections排序,实现找出最大值。 版本 :JDK 1.8,Spring Boot 2.6.3,fastjson-2.0.33。 1.一个JSON字符串,找出最大值 1.1JSON字符串 1.2解析 把JSON字符串转换是JSONArray类型,把值取出转换为独立对象,再做比较。 2.使用java.

    2024年02月15日
    浏览(37)
  • 记录EF 排序配上自定义的比较器

    要求页面文件显示的时候能够按照序号去排序要求如下: 数据库有一个列存放文件名,如: 1.1文件 1.2文件 1.1.1文件 1.1.11文件1.0.txt 1.1.2(文件).pdf 现在需要实现查询的时候按照这个列排序,并且是按照序号排序。 查询的时候是按层级查询的,每次查询只会当前所在层,1

    2024年02月08日
    浏览(37)
  • XL6601系列ACMP模拟比较器使用

    目录 模拟比较器(ACMP) 简介特性 实现 结构框图 Demo 官方解释 功能说明 正输入与负输入 输出 输出标志 中断 设置与操作 实现一个简单的小功能,掉电检测,使用到了ACMP外设,认为学习东西后总得产出点什么,所以在此简单记录一下。 模拟比较器模块(ACMP)提供一个用于比

    2024年02月01日
    浏览(40)
  • 【STM32】STM32G4系列片内模拟器件-比较器的使用

    STM32G4系列内置了片内模拟比较器,为电机控制、电源监测等方面的应用提供了很大的便利。要使用片内比较器,只需使用STM32CubeMX进行简单配置即可。 首先,在CubeMX中打开比较器的接口,这里展示了比较器1的输入输出端口。 在比较器配置界面中设置好正负输入端口,其中负

    2024年02月08日
    浏览(206)
  • 认识比较器

    Java中比较器是排序、加入有序数组等操作的时候必须要有的,没有的话会报错,例如下面这段代码: 运行时会发生下面的异常 Exception in thread \\\"main\\\" java.lang.ClassCastException: dataStructure.heap.Student cannot be cast to java.lang.Comparable     at java.util.ComparableTimSort.countRunAndMakeAscending(Compar

    2023年04月25日
    浏览(45)
  • Java ---比较器

          我们知道基本数据类型的数据(除 boolean 类型外)需要比较大小的话,之间使用比较运算符即可,但是引用数据类型是不能直接使用比较运算符来比较大小的。那么,如何解决这个问题呢?      在 Java 中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比

    2024年02月03日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包