Comparator与Comparable的区别

当需要排序的集合或数组不是单纯的数字类型的时候,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。

Comparator和Comparable的区别如下:

Comparable用在对象本身,说明这个对象是可以被比较的,也就是说可以被排序的。(String和Integer之所以可以比较大小,是因为它们都实现了Comparable接口,并实现了compareTo()方法)。

Comparator用在对象外面,相当于定义了一套排序算法来排序。

下面通过具体的例子来理解Comparator和Comparable的区别:

 

Comparable

Java代码 
  1. package  com.tianjf;  
  2.   
  3. import  java.util.Arrays;  
  4.   
  5. public  class  User implements  Comparable<Object> {  
  6.   
  7.     private  String id;  
  8.     private  int  age;  
  9.   
  10.     public  User(String id, int  age) {  
  11.         this .id = id;  
  12.         this .age = age;  
  13.     }  
  14.   
  15.     public  int  getAge() {  
  16.         return  age;  
  17.     }  
  18.   
  19.     public  void  setAge(int  age) {  
  20.         this .age = age;  
  21.     }  
  22.   
  23.     public  String getId() {  
  24.         return  id;  
  25.     }  
  26.   
  27.     public  void  setId(String id) {  
  28.         this .id = id;  
  29.     }  
  30.   
  31.     @Override   
  32.     public  int  compareTo(Object o) {  
  33.         return  this .age - ((User) o).getAge();  
  34.     }  
  35.   
  36.     /**  
  37.      * 测试方法  
  38.      */   
  39.     public  static  void  main(String[] args) {  
  40.         User[] users = new  User[] { new  User("a" , 30 ), new  User("b" , 20 ) };  
  41.         Arrays.sort(users);  
  42.         for  (int  i = 0 ; i < users.length; i++) {  
  43.             User user = users[i];  
  44.             System.out.println(user.getId() + " "  + user.getAge());  
  45.         }  
  46.     }  
  47. }  


Comparator

Java代码 
  1. package  com.tianjf;  
  2.   
  3. import  java.util.Arrays;  
  4. import  java.util.Comparator;  
  5.   
  6. public  class  MyComparator implements  Comparator<Object> {  
  7.   
  8.     @Override   
  9.     public  int  compare(Object o1, Object o2) {  
  10.         return  toInt(o1) - toInt(o2);  
  11.     }  
  12.   
  13.     private  int  toInt(Object o) {  
  14.         String str = (String) o;  
  15.         str = str.replaceAll("一" , "1" );  
  16.         str = str.replaceAll("二" , "2" );  
  17.         str = str.replaceAll("三" , "3" );  
  18.         return  Integer.parseInt(str);  
  19.     }  
  20.   
  21.     /**  
  22.      * 测试方法  
  23.      */   
  24.     public  static  void  main(String[] args) {  
  25.         String[] array = new  String[] { "一" , "三" , "二"  };  
  26.         Arrays.sort(array, new  MyComparator());  
  27.         for  (int  i = 0 ; i < array.length; i++) {  
  28.             System.out.println(array[i]);  
  29.         }  
  30.     }  
  31. }  
Qt开发中彻底解决中文乱码问题 中文乱码问题主要源于编码不一致需要同时设置控制台和Qt应用程序的编码确保项目文件和环境配置的编码一致文件操作时注意指定正确的编码。 阅读详情

相关推荐

毫米波雷达入门知识

毫米波雷达入门知识

ssbzxcvbnm1234567的博客 5446

Comparator和Comparable的区别

文章目录 一、概述 二、Comparable 三、Comparator 四、Comparator和Comparable的区别 五、实现方式 一、概述   Comparable和Comparator都是两个接口,接口都可以用来实现集合中元素的比较、排序,Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而Comparator既可以嵌入到自身类中,也可以在一个独立的

m0_71087031的博客 1万+

电子发票二维码背后的秘密:10分钟看懂校验码、加密字符含义与防伪设计

本文深入解析电子发票二维码的结构与防伪设计,揭示校验码和加密字符的生成原理及验证方法。通过实际案例和技术细节,帮助财务人员理解电子发票的安全机制,提升防伪识别能力,确保税务合规。

weixin_29248611的博客 530

Comparable和Comparator的 区别

一、概述: 对一组数据进行排序(升序或降序),在Java中有很多方式,可以自己手写排序算法(冒泡、快速、二叉树排序等),但一般都采用JDK为我们提供的现有的2个接口,Comparable和Comparator。 二、相同点: 两者都是用来用作对象之间的比较,都可以自定义比较规则。 两者都是返回一个描述对象之间关系的int。 三、区别: Comparable是java.lang包下的,Comparator是java.util包的。 实现Comparable必须重写compareTo(T o),实现Com

FaizOrange的博客 1842

【深度排查】VScode 远程 SSH 连接失败:从网络握手到服务部署的全链路诊断指南

本文详细解析了VScode远程SSH连接失败的常见原因及解决方案,从基础网络排查到SSH服务配置,再到VScode特有的问题处理。特别针对Ubuntu和TrueNAS系统提供了具体配置建议,帮助开发者快速解决'Could not establish connection'等连接问题,提升远程开发效率。

weixin_30301449的博客 447

WSL2+Docker实战:在Windows上部署MinerU 2.5.3,解锁媲美Demo的VLM PDF解析能力

本文详细介绍了如何在Windows系统上通过WSL2+Docker部署MinerU 2.5.3,实现媲美Demo的VLM PDF解析能力。文章涵盖环境准备、Docker部署实战技巧及高级使用技巧,特别针对PDF识别中的复杂排版、公式和图表处理提供了优化方案,帮助用户高效处理学术论文和技术文档。

weixin_29291573的博客 482

Comparable和Comparator的区别?

该文章是关于Java中Comparable和Comparator两个接口的概述、使用方法以及它们之间的比较。主要介绍了如何使用这两个接口来对Java对象进行排序。其中,Comparable接口定义了对象之间的自然顺序,而Comparator接口则可以自定义排序规则。文章还详细比较了这两个接口的异同点,包括它们的相同点和不同点,以便读者更好地理解和使用它们。

程序员Forlan的博客 2025

Cluster Computing投稿

在overleaf中新建picins.sty文件,该文件是导入的包在.tex文件中添加以下内容\usepackage{picins}%实现作者简介%下边这块有几个人复制几段\vspace{0\baselineskip} %这一行控制作者间隔,可视情况改数字!!!!!!!!

这里是萤石ym的学习路途,努力搬砖! 5536

Comparable和Comparator的用法和区别

comparable是个接口,此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。 实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序

weixin_73869209的博客 2615

ros系统在Debian系统上的移植

摘要:本文详细介绍了在Debian系统上移植ROS(机器人操作系统)的完整流程。主要内容包括:1)Debian版本与ROS版本的对应关系;2)配置软件源和安装依赖的具体命令;3)安装ROS核心组件和开发工具的步骤;4)常见兼容性问题的解决方案;5)性能优化和维护建议。重点强调了版本匹配的重要性,推荐选择LTS版本组合(如Debian11+ROS Noetic),并提供了从基本安装到自定义功能包编译的全套方案。文中包含详细的终端命令,可帮助用户顺利完成ROS移植并解决可能遇到的问题。

start_up_go的博客 1493

基于 YOLOv26 的高速抛物识别系统:微小目标检测

本文提出了一种基于YOLOv26的高速抛物识别系统,专注于微小目标检测。系统采用多模块协同架构,包括视频预处理、YOLOv26检测、目标跟踪和抛物行为分析等模块。关键技术包括YOLOv26s模型检测、DeepSORT目标跟踪和边缘计算部署。通过构建包含多种抛物类型的专业数据集,并应用数据增强技术提升模型性能。系统实现了车辆检测、微小抛物目标识别、抛物轨迹分析和风险等级评估等功能,可实时检测高速公路上的抛物行为并触发告警,为交通管理提供智能化解决方案。

一键难忘的博客 633

Comparable和Comparator区别

Comparable:内部比较器,必须在类上实现该接口通过固定字段进行比较;Comparator:是外部比较器,在方法中通过lambda表达式实现接口就可以了。:Comparable重写方法compareTo(T o);Comparator重写方法compare(T o1, T o2):一个参数,默认是Comparable自然排序,二个参数,需要传入Comparator外部排序。:Comparable唯一字段排序,Comparator可以有多个字段排序。:都是用于比较排序。

qq_64847107的博客 1053

STC单片机 普通 I/O 口中断功能介绍和使用

STC32单片机 普通 I/O 口中断功能介绍和使用

perseverance51博客 3048

Comparable与Comparator的区别

 Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。Comparator位于包java.util下,而Comparable位于包  

小帅的专栏 6万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

浅析 Comparable和 Comparator的区别

简介 Comparable和 Comparator都是java.util包下的两个接口,从字面上看这两个接口都是用来做比较用的,但是jdk里面不可能定义两个功能相同的接口,所以他们肯定有不同的用处。 1、Comparable 1.1 说明 Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些 类是可以和自己比较的,至于具体和另一个实现了Compar...

wlh2015的博客 3万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Comparable 和 Comparator 接口的区别

在Java中,Comparable 和 Comparator 两个接口经常用于对象排序。然而,它们在使用场景和实现细节上存在显著的区别。本文将详细介绍这两个接口的主要区别以及它们各自的作用。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 7011

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Comparator与Comparable有什么区别

Comparator与Comparable是Java中实现对象排序的两种接口。Comparable在对象类内部实现,定义自然排序规则;Comparator作为独立比较器,可定义多种排序规则。主要区别在于:Comparable是内部排序(需在类中实现),Comparator是外部排序(可灵活应用于不同类)。选择依据:需要默认排序用Comparable,需要多种或跨类排序用Comparator。

guslegend的博客 697

JAVA中Comparable和 Comparator的区别

JAVA中的Comparable 和 Comparator

Yusean_L的博客 3435

java中Comparable和Comparator的区别

文章目录简介ComparableComparator举个例子 java中Comparable和Comparator的区别 简介 java.lang.Comparable和java.util.Comparator是两个容易混淆的接口,两者都带有比较的意思,那么两个接口到底有什么区别,分别在什么情况下使用呢? Comparable Comparable是java.lang包下面的接口,lang包下面可...

程序那些事 9561

comparator和comparable的区别

前言: comparator和comparable都是用来实现集合中元素的排序比较的。Comparator位于包java.util下,而Comparable位于包java.lang下。他们之间的区别在于用法上。Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。Comparable 是一个对象本身就已经支...

awake_lqh的博客 4047

Comparable和Comparator的区别

简述Comparable和Comparator的区别

weixin_55758279的博客 1103

Comparable & Comparator的区别

Comparable & Comparator接口都可以用来实现集合中元素的比较、排序,Comparator位于包java.util下, Comparable位于包java.lang下 Comparable接口将比较代码嵌入自身类中 Comparator在一个独立的类中实现比较。 像Integer、String等这些基本类型的JAVA封装类都已经实现了Comparable接口,这些类对象本身就支持自比较,直接调用Collections.sort()就可以对集合中元素的排序,无需自己去实现Compar

weixin_49263647的博客 2123

排序Comparable 和 Comparator的区别

compareTo 方法接收的参数 p 是要对比的对象,排序规则是用当前对象和要对比的对象进行比较,然后返回一个 int 类型的值。然而这个时候,老板有一个需求:需要根据 Person 对象的年龄 age 属性进行倒序,也就是根据 age 属性从大到小进行排序,这个时候就可以请出,我们本文的主角:Comparable 出场了。从上图可以看出,当自定义类 Person 没有实现 Comparable 时,List 集合是没有排序的,只能以元素的插入顺序作为输出的顺序。是外部定义并实现排序的,实现。

十一月廿七风雨大作 8673

Comparable和Comparator的联系与区别

实际上我们发现这些这些集合或者数组之所以可以排序,都是实现了这个Comparable接口做到了可以在本类中实现排序。通过这两幅图片我们可以清晰的观察到这两个接口来的位置,一个是在java.lang,一个是在java.util这个就是为什么有一个需要导包而另外一个不需要的原因。每次只需要传入一个参数,因为这个方法就在本类中每次传入的形参就是本类的对象,可以理解为一个内置的比较器内部的成员会自己比较。关于Comparable和Comparator的联系和区别,我们先实现这个两个接口。...

sunalongfor的博客 275

Java 中Comparator 和 Comparable接口的区别

Java 中Comparator 和 Comparable接口的区别

weixin_42320587的博客 704
上一篇: virgo server使用指南
下一篇: 浅谈如何用Java操作MongoDB?
Snoopy7713
博客等级 码龄21年 17粉丝 681原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值