Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Java】对象比较大小

【Java】对象比较大小

作者头像
CODER-V
发布于 2023-03-04 05:44:12
发布于 2023-03-04 05:44:12
1.5K00
代码可运行
举报
文章被收录于专栏:藏经阁藏经阁
运行总次数:0
代码可运行
  • Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。
  • Java实现对象排序的方式有两种:
    • 自然排序:java.lang.Comparable
    • 定制排序:java.util.Comparator
  • 规则:需要我们自定义根据对象的某个或某些属性进行排序

1. 方式一:实现Comparable接口

步骤:

  1. 用我们自定义的类A实现Comparable接口
  2. 重写Comparable接口中的compareTo(Object obj)方法,在此方法中声明类A的对象的大小比较规则

重写compareTo(Object obj)方法示例:和重写equals()方法思路类似

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	@Override
    public int compareTo(Object o) {
        //1.若实参对象和当前对象地址相同,则时同一个对象
        if (o == this) {
            return 0;
        }

        //2.若实参对象是当属于当前类或子类实例,则强转,声明比较规则
        if (o instanceof A) {

            // 强转
            A p = (A)o;

            // 比较规则:用参2与参1比较。小于return 负数,大于return 整数,相等return 0。
            // 比较规则1,这里注意是谁的compare方法
            int value = Double.compare(this.xxx,xxx);

            // 比较规则2
            if (value != 0) {
                // 从小到大
                // return value;
                // 从大到小
                return -value;
            }
            // 若比较规则1的结果相同,则使用该规则;从从小到大
            return this.xxx.compareTo(p.xxx);
            // 从大到小
            // return -this.xxx.compareTo(p.xxx);
        }

        //3.若实参对象不属于当前类,则抛出类型异常
        throw new RuntimeException("类型不匹配!");

		// 使用示例
		// Arrays.sort(arr实现类对象的实例)
    }

2. 方式二:实现Comparator接口

2.1 为什么有了Comparable还需要Comparator

  • 情况1: 当我们需要对对象进行排序,而对象所在类又没有实现Comparable,我们也没法修改所在类代码的情况下使用。
  • 情况2: 当这个类实现了Comparable接口,但是比较规则不满足我们的需求,而我们又无法修改其源码的时候使用。

因为以上两种情况的存在,我们可以临时的去指定排序方式,于是就有了Comparator。

2.2 实现

步骤:

  1. 在当前类A实现Comparator接口
  2. 重写compare(Object o1, Object o2)方法,在此方法中声明对象的大小比较规则

注意: Comparator的比较规则会覆盖Comparable的比较规则

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//1.创建一个实现Comparator接口的实现类对象,这里使用了匿名实现类
Comparator comparator = new Comparator() {

    @Override
    public int compare(Object o1, Object o2) {
        
        //2.若实参对象是当属于当前类或子类实例,则强转,声明比较规则
        if(o1 instanceof A && o2 instanceof A){
			// 强转
			A p1 = (A) o1;
       		A p2 = (A) o2;
			
			// 比较规则:用参2与参1比较。小于return 负数,大于return 整数,相等return 0。
			// 从小到大
			return Double.compareTo(p1.getXxx(),p2.getXxx());
			// 从大到小
			//return -Double.compareTo(p1.getXxx(),p2.getXxx());
		}

        //3.若实参对象不属于当前类,则抛出类型异常
        throw new RuntimeException("类型不匹配!");

		// 使用示例
		// Arrays.sort(arr,comparator类A的实例);
    }
}

3. Comparable VS Comparator

角度一:

  • 自然排序:单一唯一,一旦指定了比较规则就不能更改
  • 定制排序:灵活多样,创建多个Comparator对象,指定不同的比较规则,调用不同的对象即可

角度二:

  • 自然排序:一劳永逸,一旦声明好就可以永久使用
  • 定制排序:在使用的时候才去零时声明

角度三:

  • 自然排序:实现接口Comparable,重写抽象方法compareTo(Object obj)
  • 定制排序:实现接口Comparator,重写抽象方法compare(Object o1, Object o2)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker入门(四):安装使用
由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用HTTPS 传输的软件包以及 CA 证书。
传说之下的花儿
2023/10/02
7190
Docker入门(四):安装使用
Docker的安装以及加速器的配置
目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
Python编程与实战
2020/03/05
1.9K0
Docker的安装以及加速器的配置
Docker(一)——环境配置
官方提供的安装教程地址:https://docs.docker.com/install/linux/docker-ce/centos/#os-requirements 官方脚本https://get.docker.com/ 其中关于镜像的选择是阿里云和亚马逊云,中国地区推荐了使用阿里云镜像 最快捷的方式脚本一键安装,国内设置镜像为Aliyun。
羊羽shine
2019/05/28
1.5K0
Linux下Docker的安装
Docker CE支持64位版本 Centos 7,并且要求内核版本不低于3.10。
Wyc
2019/06/03
2K0
002.Docker安装部署
Delta RPMs disabled because /usr/bin/yum provides applydeltarpmnot installed.
木二
2019/07/26
4530
docker安装(CentOS 7)
本文由 bytebye 创作 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
ByteBye
2019/09/24
1K0
CentOS 7 安装 Docker CE
旧版本的 Docker 在 CentOS 中的包名为docker或docker-engine。如果之前安装了 Docker 的旧版本,需要先卸载旧版 Docker 及相关依赖:
苏易北
2019/01/10
1.4K0
CentOS 7 安装 Docker CE
linux系统安装docker
Docker是一种轻量级的容器技术,可以帮助开发者更加方便地打包、发布和管理应用程序。在Linux系统上安装Docker非常容易,本文将详细介绍如何在Linux系统上安装和配置Docker,并提供一些示例,以帮助初学者更好地了解Docker。
玖叁叁
2023/04/26
8.2K0
Linux 安装 Docker
本文介绍最新版本的 Docker CE 安装。 本文内容来自我参与维护的 《Docker 从入门到实践》 项目。 CentOS 7 配置 REPO Install yum-utils, which provides the yum-config-manager utility: $ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 # 官方源 # $ sudo yum-config-manager \
康怀帅
2018/02/28
2.6K0
Ubuntu 17.04 x64 安装 Docker CE 初窥 Dockerfile 部署 Nginx
Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!
程序员鹏磊
2018/01/12
1.2K0
Ubuntu 17.04 x64 安装 Docker CE 初窥 Dockerfile 部署 Nginx
Docker---(0)Docker 安装
----------------------------------------------------------------------------------------------------------
IT云清
2019/01/22
1K0
云原生之路 | 3.实践Docker容器环境部署及初体验
温馨提示:作者最近开通的知识星球,全栈系列从门到实践教程将会逐步同步到星球内,加入星球将获得作者在安全、运维、开发中的所有学习实践笔记,和问题答疑以及远程技术支持,希望大家多多支持!
全栈工程师修炼指南
2024/03/13
6780
云原生之路 | 3.实践Docker容器环境部署及初体验
一文了解Docker
1)客户端(client): 通过命令行与Docker的守护进程通信,类似于mysql的客户端工具
终身幼稚园
2020/05/18
5870
一文了解Docker
1.Docker学习之基础知识
描述:Docker [ˈdɑ:kə(r)] 是一个基于Go语言开发实现的遵循Apache 2.0协议开源项目,目标是实现轻量级的操作系统虚拟化解决方案; ,诞生于2013年初最初发起者是dotCloud公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,后续由于docker的发展后来也改名为Docker Inc,它是仅次于OpenStack最受欢迎的云计算开源项目;Docker 从 17.03版本之后分为 CE(Community Edition) 和 EE(Enterprise Edition)
全栈工程师修炼指南
2022/09/28
1.6K0
1.Docker学习之基础知识
CentOS Docker 安装
打开 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 并下载指定版本的 rpm 文件。
Woo
2021/01/06
9940
CentOS Docker 安装
CentOS 8.4安装Docker
  Docker 是一个用于开发、传送和运行应用程序的开放平台。Docker 使您能够将应用程序与基础设施分开,以便您可以快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础设施。通过利用 Docker 的快速交付、测试和部署代码的方法,您可以显着减少编写代码和在生产中运行代码之间的延迟。为了让开发、部署、测试和分发变得更高效和轻松,让我们把Docker安装起来体验一下它的魅力所在吧!
追逐时光者
2021/11/19
5750
CentOS 8.4安装Docker
Docker 是一个用于开发、传送和运行应用程序的开放平台。Docker 使您能够将应用程序与基础设施分开,以便您可以快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础设施。通过利用 Docker 的快速交付、测试和部署代码的方法,您可以显着减少编写代码和在生产中运行代码之间的延迟。为了让开发、部署、测试和分发变得更高效和轻松,让我们把Docker安装起来体验一下它的魅力所在吧!
用户4268038
2021/11/18
7930
使用docker完成生信分析环境搭建
生信开发人员最头疼的问题,可能就是平台搭建和软件安装了。部署和迁移上要费很大力气。本文讲述使用docker制作一个镜像,后续通过导入自己定制的镜像,复制文件完成分析流程的部署和迁移。
SliverWorkspace
2020/01/17
1.8K0
Docker入门-介绍和安装
Docker最初是dotCloud公司创建人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于2013年3月以Apache2.0授权协议开源,主要项目代码在Github上进行维护。Docker项目后来加入了Linux基金会,并成立推动开放容器联盟(OCI)。
小码农薛尧
2019/08/21
6970
Docker入门-介绍和安装
Ubuntu Server下Docker实战 01: 安装Docker
本系列文章主旨在于使用docker来搭建实际可用的基础服务,具体到每一步的操作和设置。
星哥玩云
2022/07/24
1.2K0
相关推荐
Docker入门(四):安装使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验