文章目录

  • 一、Comparable
  • 二、Comparator
    • 示例代码

一、Comparable

public interface Comparable

此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。

实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

二、Comparator

public interface Comparator

强行对某个对象 collection 进行整体排序 的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。

当且仅当对于一组元素 S 中的每个 e1 和 e2 而言,c.compare(e1, e2)==0 与 e1.equals(e2) 具有相等的布尔值时,Comparator c 强行对 S 进行的排序才叫做与 equals 一致 的排序。

示例代码

package priv.lwx.javaprac.functionalinterface;import java.util.Arrays;
import java.util.Comparator;/*** @ClassName Demo03FunctionalInterface* @Description TODO* @Author liaowenxiong* @Version 1.0* @date 2021/9/7 下午3:26*/
public class Demo03FunctionalInterface {public static void main(String[] args) {// 获取比较器对象Comparator<String> c = getStringComparator();String[] strs = new String[]{"ddff", "de", "ert"};// 根据传入的比较器对数组进行排序Arrays.sort(strs, c);// 把排序号的字符串数组打印输出System.out.println(Arrays.toString(strs));}public static Comparator<String> getStringComparator() {// 使用匿名内部类来实现return new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {// 如果返回0表示相等// 后面减去前面的,表示降序;前面减去后面的表示升序return o2.length() - o1.length();}};}
}

Java对象如何实现比较规则相关推荐

  1. digester java_[jakarta-commons] 使用Digester解释xml获取java对象(代码入注规则 或 配置规则 任你选!)...

    # re: [jakarta-commons] 使用Digester解释xml获取java对象(代码入注规则 或 配置规则 任你选!) 2009-11-09 10:27 | Java小子 楼主,运行起 ...

  2. Jackson json转为java对象时遇到不规范的命名规则处理

    今天Android开发的同事问我他在调用服务端接口返回的json数据时,发现对方的json字符串中有没按照驼峰命名的key,结果导致他在用jackson转为java对象的时候,获取不到该key的值,下 ...

  3. java 对象怎么序列化,java对象序列化总结

    java对象序列化小结 百度百科上介绍序列化是这样的: 序列化 (Serialization): 将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储 ...

  4. java map 结构体_业务代码的救星——Java 对象转换框架 MapStruct 妙用

    简介 在业务项目的开发中,我们经常需要将 Java 对象进行转换,比如从将外部微服务得到的对象转换为本域的业务对象 domain object,将 domain object 转为数据持久层的 dat ...

  5. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  6. Java对象的生命周期与作用域的讨论(转)

    导读: Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 + T2 +T3.其中T1表示对象的创建时间,T2表示对 ...

  7. java对象 Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念

    PO(persistant object) 持久对象 在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了.通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理.可以 ...

  8. FastJson、Jackson、Gson进行Java对象转换Json的细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  9. java对象生命周期_Java对象生命周期和类生命周期

    原标题:Java对象生命周期和类生命周期 作者:彭空空 链接:https://www.jianshu.com/p/25ea857ba78b 导读 对象的生命周期 类的加载机制 类的生命周期 类加载器 ...

最新文章

  1. copy一下面试题目
  2. angular6父子组件之间的引入报错
  3. 专访联想谢政维:功耗和价格是天蝎项目最大障碍!
  4. voip和rtc_为什么开发WebRTC与VoIP开发不一样?(上)
  5. 多个基因集富集结果泡泡图绘制展示
  6. golang go语言_在Go语言中无需反思即可使用Lodash的好处
  7. python教程1003无标题_OSError:[WinError 10038]试图对非s的对象执行操作
  8. 小米11和vivox60买哪个?
  9. Doris 之Frontend(FE)和Backend(BE)配置
  10. 果园机器人的写作思路_《果园机器人》三年级教学设计
  11. 基于ROS的A*算法代码学习
  12. 华为云学院新春大礼包:场景化微认证上新了!
  13. 什么是软件的生命周期?
  14. 电脑无法识别U盘的解决方式集锦_艾孜尔江撰稿
  15. 离散数学学习笔记-2-群 子群
  16. 阿里巴巴Java面试题目
  17. 《寒江独钓》内核学习笔记
  18. 猿辅导编程python_猿辅导旗下品牌猿编程,宣布成立少儿编程研究院
  19. GNU工具链(GNU Toolchain)学习
  20. Android uevent进程源码分析

热门文章

  1. line和spline_探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)
  2. assertj断言异常_编写自定义的AssertJ断言
  3. payara 创建 集群_使用Payara Micro的Easy Java EE Microservices
  4. java 可视化_可视化Java 9模块关系
  5. c++返回指针时候注意提防_提防Java中的函数式编程!
  6. rest api_REST API的演变
  7. java 性能调优_Java性能调优调查结果(第二部分)
  8. Spring State Machine:它是什么,您需要它吗?
  9. rmi full gc问题_RMI强制Full GC每小时运行一次
  10. 在2017年从Maven工件生成P2存储库