Java中Comparator升序降序的具体使用

 更新时间:2023年06月09日 15:19:21   作者:xiaopangcame  
本文主要介绍了Java中Comparator升序降序的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在使用Java自带的排序函数时,往往需要根据自己的需求自定义比较器。以前一直对Comparator的升序降序疑惑。现在记录一下,加深下印象。

先给结论:

实现Comparator接口,必须实现下面这个函数:

@Override
public int compare(CommentVo o1, CommentVo o2) {
           return o1.getTime().compareTo(o2.getTime());
}

这里o1表示位于前面的对象,o2表示后面的对象

  • 返回-1(或负数),表示不需要交换01和02的位置,o1排在o2前面,asc
  • 返回1(或正数),表示需要交换01和02的位置,o1排在o2后面,desc

举例说明:(分析说明在运行结果之后)

package com.zhb.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class A {
    int a;
    public A(int a) {
        this.a = a;
    }
    @Override
    public String toString() {
        return "[a=" + a + "]";
    }
}
class MyComparator implements Comparator<A> {
    @Override
    public int compare(A o1, A o2) {
        //升序
        //return o1.a - o2.a;
        //降序:后面会具体分析为什么降序
        return o2.a - o1.a;
    }
}
public class ComparatorTest {
    public static void main(String[] args) {
        A a1 = new A(5);
        A a2 = new A(7);
        List<A> list = new ArrayList<A>();
        list.add(a1);
        list.add(a2);
        Collections.sort(list, new MyComparator());
        System.out.println(list);
    }
}

输出结果:

下面来用我们之前的结论解释为什么return o2.a - o1.a;就是降序了:

首先o2是第二个元素,o1是第一个元素。无非就以下这些情况:

①: o2.a > o1.a : 那么此时返回正数,表示需要调整o1,o2的顺序,也就是需要把o2放到o1前面,这不就是降序了么。

②:o2.a < o1.a : 那么此时返回负数,表示不需要调整,也就是此时o1 比 o2大, 不还是降序么。

到此这篇关于Java中Comparator升序降序的具体使用的文章就介绍到这了,更多相关Java Comparator升序降序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java开发ServiceLoader实现机制及SPI应用

    java开发ServiceLoader实现机制及SPI应用

    这篇文章主要为大家介绍了java开发ServiceLoader实现机制及SPI应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Java关键字详解之final static this super的用法

    Java关键字详解之final static this super的用法

    this用来调用目前类自身的成员变量,super多用来调用父类的成员,final多用来定义常量用的,static定义静态变量方法用的,静态变量方法只能被类本身调用,下文将详细介绍,需要的朋友可以参考下
    2021-10-10
  • MyBatis Plus复合主键问题的解决

    MyBatis Plus复合主键问题的解决

    在数据库设计中,有时候需要使用复合主键来唯一标识表中的一行数据,本文将为您详细介绍MyBatis Plus中复合主键的问题以及解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Java socket 如何获取gps定位

    Java socket 如何获取gps定位

    在Java中使用Socket来直接获取GPS定位信息并不直接可行,因为GPS数据通常不是通过Socket通信来获取的,本文给大家介绍Java socket 获取gps定位的相关知识,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • Java使用同步方法解决银行取钱的安全问题案例分析

    Java使用同步方法解决银行取钱的安全问题案例分析

    这篇文章主要介绍了Java使用同步方法解决银行取钱的安全问题,结合具体案例形式分析了java同步方法实现多线程安全操作银行取钱问题,需要的朋友可以参考下
    2019-09-09
  • Java中Map的排序问题详解

    Java中Map的排序问题详解

    本文给大家分享的是java中的map的按值排序和按键排序问题,并通过具体的示例,希望对大家能有所帮助。
    2016-01-01
  • Java基础入门 Swing中间容器的使用

    Java基础入门 Swing中间容器的使用

    这篇文章主要介绍了Java基础入门 Swing中间容器的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringBoot实现密码安全存储的五种方式小结

    SpringBoot实现密码安全存储的五种方式小结

    项目开发中,密码安全存储是非常关键的一环,作为开发者,我们需要确保用户的密码在存储时被安全地加密,避免因数据泄露而造成严重后果,所以本文给大家介绍了SpringBoot实现密码安全存储的5种方式,需要的朋友可以参考下
    2025-03-03
  • Mybatis-plus配置多数据源,连接多数据库方式

    Mybatis-plus配置多数据源,连接多数据库方式

    这篇文章主要介绍了Mybatis-plus配置多数据源,连接多数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • SpringBoot错误提示400状态问题

    SpringBoot错误提示400状态问题

    这篇文章主要介绍了SpringBoot错误提示400状态问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论