Java的Comparator升序降序的记法

news2024/12/28 19:43:42

在使用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大, 不还是降序么。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/612658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue+springboot电动车共享电池租赁管理系统设计与实现

基于java语言、Springboot框架、B/S架构、Mysql数据库设计并实现了共享电动车电池管理系统设计与实现。系统主要包括首页、个人中心、用户管理、维护人员管理、商户管理、区域信息管理、电池信息管理、租赁订单管理、归还订单管理、费用订单和定、提醒信息管理、维护信息管理、…

基于vue3+mqtt实现的远程串口实时调试助手(网络透传)

软件&#xff1a;串口调试助手&#xff08;基于MQTT消息协议实现多客户端同时订阅模式&#xff09; 扩展&#xff1a;手机端H5(websocket&#xff09;和vue3mqtt实现的接收客户端 用途&#xff1a;本地化串口调试&#xff0c;远程技术支持时可用&#xff0c;实时同步透传&…

Docker容器操作

#容器创建&#xff1a;就是将镜像加载到容器的过程。 新创建的容器默认处于停止状态&#xff0c;不运行任何程序&#xff0c;需要在其中发起一个进程来启动容器。 格式&#xff1a;docker create [选项] 镜像 常用选项&#xff1a; -i&#xff1a;让容器开启标准输入接受用户输…

2023年下半年,智能家居渠道有什么新趋势?

2023年&#xff0c;全国各地陆续释放利好政策的信号&#xff0c;商务部将今年定位为“消费提振年”&#xff0c;照明与家居建材行业的市场环境及消费潜力将会得到大幅度改善。随着产业升级与消费需求升级&#xff0c;近年来&#xff0c;智慧照明与智能家居和智慧整装的融合趋势…

Mac - 鼠标拖尾特效 By CursorEffect2

目录 一.引言 二.安装 CursorEffect2 三.使用 CursorEffect2 四.使用效果 五.内存消耗 六.一键关闭 七.总结 一.引言 在自己搭建的 Hexo 博客上可以定义鼠标点击的特效&#xff0c;如图点击后可以产生彩色的斑点。 于是想着除了浏览 Hexo 博客外&#xff0c;能不能别的也…

超黑光摄像机可以有多“黑“?

目前&#xff0c;市场标准黑光级IPC能在0.0005Lux(照度单位)的低照下维持彩色&#xff0c;但星光级或普通红外条件则必须依赖补光灯。那么有没有一款摄像机能达到超黑光的标准&#xff0c;能够在更暗环境下&#xff0c;不需要额外补光的情况下维持彩色呢&#xff1f; 超低照成像…

STM32接收串口数据并且存储SD,Python读取SD验证

在我们使用 STM32 或者 FPGA 采集数据的时候&#xff0c;需要将数据存储到SD卡中&#xff0c;因为数据是按照地址存储的&#xff0c;并且没有文件结构&#xff0c;所以不能直接用电脑的文件管理器读取&#xff0c;下面是一种读取数据的办法 0. 实验平台 正点原子STM32F407ZG探…

mysql 是否包含 返回索引 截取字符串

是否包含返回索引 原文链接&#xff1a;https://www.cnblogs.com/shoshana-kong/p/16474175.html 方法1&#xff1a;使用通配符%。 通配符也就是模糊匹配&#xff0c;可以分为前导模糊查询、后导模糊查询和全导匹配查询&#xff0c;适用于查询某个字符串中是否包含另一个模糊…

TCP协议是如何实现可靠传输的

一、TCP最主要的特点 1.TCP 是面向连接的运输层协议&#xff0c;在无连接的、不可靠的 IP 网络服务基础之上提供可靠交付的服务。为此&#xff0c;在 IP 的数据报服务基础之上&#xff0c;增加了保证可靠性的一系列措施。 2.TCP最主要的特点 &#xff08;1&#xff09;TCP 是…

SpringBootWeb AOP(上)

事务&AOP 1. 事务管理 1.1 事务回顾 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功&#xff0c;要么同时失败。 怎么样来控制这组操作&…

php通过cURL爬取数据(2):CURLINFO_HTTP_CODE返回0

CURLINFO_HTTP_CODE返回0 一、项目说明二、curl_getinfo返回异常1.小鹅通SDK2.CURLINFO_HTTP_CODE为0的原因有哪些&#xff1f;3.返回CURLINFO_HTTP_CODE0的解决方案4.请求超时和服务器配置&#xff0c;CPU的使用率有关系吗5.结论 三、阿里云短信发送延迟后而集中发送1.发送集中…

自动化测试Junit

目录 Junit5注解TestDisabledBeforeAll、AfterAll、BeforeEach、AfterEach 参数化单参数多参数CSV获取参数方法获取参数 测试用例执行顺序断言 assert断言相等断言不相等断言为空断言不为空 测试套件 自动化测试项目1. 熟悉项目2. 针对核心流程设计手工测试用例3. 将手工测试用…

智能生成的登录、注册和找回密码界面,让您的网站更加便捷和高效

chatgpt国内镜像 https://chat.xingheai.life 恰饭广告 智能生成的登录、注册和找回密码界面&#xff0c;让您的网站更加便捷和高效 本文介绍了一种基于ChatGPT的智能生成技术&#xff0c;用于生成登录、注册和找回密码界面。我们使用了自然语言处理和机器学习技术&#xff0c;…

七、进程地址空间

一、环境变量 &#xff08;一&#xff09;概念 环境变量(environment variables)&#xff1a;系统当中用做特殊用途的系统变量。 如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但是照样可…

深入理解深度学习——正则化(Regularization):Dropout

分类目录&#xff1a;《深入理解深度学习》总目录 Dropout供了正则化一大类模型的方法&#xff0c;计算方便且功能强大。在第一种近似下&#xff0c;Dropout可以被认为是集成大量深层神经网络的实用Bagging方法。Bagging涉及训练多个模型&#xff0c;并在每个测试样本上评估多个…

数组扁平化的8种方法 - js篇

文章目录 方式1&#xff1a;使用基础的递归遍历方式2&#xff1a;使用reduce函数递归遍历方式3&#xff1a;数组强制类型转换方式4&#xff1a;while循环结合findIndex与concat方式5&#xff1a;直接使用ES6的flat方法方式6&#xff1a;使用JSON的函数和正则表达式方式7&#x…

#【六·一】让代码创造童话,共建快乐世界# 庆祝儿童节的Html和Python代码

文章目录 1.儿童节的简介2.中国庆祝儿童节的方式3.一段庆祝儿童节的Python代码4.一段庆祝儿童节的Html代码 1.儿童节的简介 国际儿童节&#xff08;又称儿童节&#xff0c;International Children’s Day&#xff09;定于每年的6月1日。为了悼念1942年6月10日的利迪策惨案和全…

dvwa靶场通关(五)

第五关 File Upload&#xff08;文件上传漏洞&#xff09; File Upload&#xff0c;即文件上传漏洞&#xff0c;通常是由于对上传文件的类型、内容没有进行严格的过滤、检查&#xff0c;使得攻击者可以通过上传木马获取服务器的webshell权限 low low等级没有任何的防护 创建…

10 【组件编码流程 组件自定义事件 全局事件总线】

1.组件编码流程 组件化编码流程&#xff1a; ​ (1).拆分静态组件&#xff1a;组件要按照功能点拆分&#xff0c;命名不要与html元素冲突。 ​ (2).实现动态组件&#xff1a;考虑好数据的存放位置&#xff0c;数据是一个组件在用&#xff0c;还是一些组件在用&#xff1a; ​ 1…

将MSYS2 MinGW集成到Windows终端

微软开发了一款Windows终端的开源软件&#xff0c;非常好用。安装后在Win7及以上系统会在右键菜单中添加一条“在终端中打开”的命令&#xff0c;非常方便。它默认配置了Windows命令行以及PowerShell&#xff0c;如果安装了Visual Studio 2022还会配置Visual Studio 2022的命令…