【java常用接口】Comparator学习

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


Comparator 是 Java 中的一个接口,用于定义对象之间的排序规则。它可以用于对集合中的对象进行排序,或者用于自定义排序算法。

1. 常见的应用场景

  • 对集合中的对象进行排序。
  • 自定义排序算法。
  • 结合 Stream流 实现更便捷的排序操作。

2. 基本使用

  • 实现 Comparator 接口:创建一个类,实现 Comparator 接口,并重写其 compare 方法。在 compare 方法中定义排序规则。
  • 匿名内部类:使用匿名内部类的方式创建 Comparator 对象,并在其中实现 compare 方法。
  • Lambda 表达式:使用 Lambda 表达式简化 Comparator 的创建。

3. 常见用法

  • 使用 Comparator.comparing 方法:Comparator 提供了 comparing 方法,可以根据对象的某个属性进行比较。
  • 使用 Comparator.comparingInt、comparingLong、comparingDouble 方法:对于基本类型的属性,可以使用相应的方法进行比较。

4. 高级用法

  • 逆序排序:通过调用 Comparator 的 reversed 方法可以实现逆序排序。
  • 多级排序:可以通过链式调用多个 Comparator 对象来实现多级排序。
  • 自定义比较逻辑:在 compare 方法中可以根据自己的需求定义排序逻辑。

5. 示例代码及解析

public class Student {
    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", score=" + score +
                '}';
    }
}

public class ComparatorExample {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("Alice", 90));
        students.add(new Student("Bob", 80));
        students.add(new Student("Charlie", 95));

        // 按照分数升序排序
        // 使用匿名内部类实现 Comparator 接口
        /*students.sort(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getScore()>o2.getScore() ? 1 : -1;
            }
        });*/
        // 使用 Lambda 表达式实现 Comparator 接口
        students.sort(Comparator.comparing(student -> student.getScore()));
        System.out.println("按照分数升序排序: " + students);

        // 按照分数降序排序
        students.sort(Comparator
                .comparing((Student student) -> student.getScore())
                .reversed());
        System.out.println("按照分数降序排序: " + students);

        // 按照分数降序排序,分数相同则按照姓名升序排序
        students.sort(Comparator
                .comparing((Student student) -> student.getScore())
                .reversed()
                .thenComparing(student1 -> student1.getName()));
        System.out.println("按照分数降序、姓名升序排序: " + students);

        // 自定义排序逻辑,按照字符串长度排序
        List<String> strings = new ArrayList<>();
        strings.add("abc");
        strings.add("defg");
        strings.add("hijkl");

        strings.sort(Comparator.comparing(s -> s.length()));
        System.out.println("按照字符串长度排序: " + strings);
    }
}

文章来源地址https://www.toymoban.com/news/detail-809827.html

到了这里,关于【java常用接口】Comparator学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 可能是最简单最通透的Comparable和Comparator接口返回值理解

    先说 Comparator 接口,这个理解了,下一个就理解了 返回-1,1交换不交换位置,如果撇开比较器的两个参数和jdk默认顺序来说,存粹是错误的 接口如下:原文链接 现提出如下标准: 标准1:jdk 默认要升序排列,即程序排序规则是 asc ,升序排列 标准2: Comparator 接口第一个参数

    2024年02月08日
    浏览(44)
  • JAVA语言-比较器Comparator

    目录 一、什么是Comparator 二、Java compare方法和compareTo方法 三、java中Comparable和Comparator的区别 Comparator的例子 Comparator 是javase中的接口,位于java.util包下。 数组工具类和集合工具类中提供的工具方法sort方法都给出了含有Comparator接口的重载方法。 List实例调sort方法 demo如下: 使

    2024年02月06日
    浏览(47)
  • Java中的比较器(Comparator)

    Java中的比较器(Comparator)是一种对象,用于定义两个对象之间的比较规则。它是一个独立的类,实现了Comparator接口,通常用于对集合中的元素进行排序。Comparator接口中有一个compare()方法,它接受两个对象作为参数,并返回一个int值,表示它们的顺序。 下面是一个简单的例

    2024年02月11日
    浏览(47)
  • Java线上故障排查(CPU、磁盘、内存、网络、GC)+JVM性能调优监控工具+JVM常用参数和命令

    根据服务部署和项目架构,从如下几个方面排查: (1)运用服务器:排查内存,cpu,请求数等; (2)文件图片服务器:排查内存,cpu,请求数等; (3)计时器服务器:排查内存,cpu,请求数等; (4)redis服务器:排查内存,cpu,连接数等; (5)db服务器:排查内存,cpu,连接数

    2024年02月07日
    浏览(67)
  • Java入门8(Comparator比较器,HashMap)

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

    2024年02月04日
    浏览(42)
  • java自然排序Comparable和比较器排序Comparator

    案例需求 存储学生对象并遍历,创建TreeSet集合使用无参构造方法 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序 实现步骤 使用空参构造创建TreeSet集合 用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的 自定义的Student类实

    2024年02月07日
    浏览(90)
  • ARM学习(23)AMP和SMP的认识与理解

    笔者来聊聊AMP和SMP架构理解(多核下系统)。 笔者经常听到ARM架构时,谈到SMP的架构或者AMP的架构,今天特意来了解一下,主要是针对多core处理,对于常见的MCU应用场景,可以比较少,往往是需要较强的性能或者应付复杂的场景,会碰到多核的场景。 SMP:Symmetric multiproces

    2024年02月12日
    浏览(106)
  • 【Java】JVM学习(七)

    堆空间如何设置 在分代模型中,各分区的大小对GC的性能影响很大。如何将各分区调整到合适的大小,分析活跃数据的大小是很好的切入点。 活跃数据的大小:应用程序稳定运行时长期存活对象在堆中占用的空间大小,也就是Full GC后堆中老年代占用空间的大小。 可以通过

    2024年02月11日
    浏览(34)
  • 【Java】JVM学习(四)

    JVM中对象的创建过程 对象的内存分配 虚拟机遇到一条new指令时,首先检查是否被类加载器加载,如果没有,那必须先执行相应的类加载过程。 类加载就是把class加载到JVM的运行时数据区的过程。 1)检查加载 首先检查这个指令的参数是否能在常量池中定位到一个类的符号引

    2024年02月11日
    浏览(36)
  • 【javaSE】抽象类和接口(2)(接口部分)

    hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍  💥 个人主页 :E绵绵的博客 💥 所属专栏 :JAVASE题目练习

    2024年04月28日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包