“黑马程序员"Comparable与Comparator的区别

从专利库到Zemax:一个6mm定焦镜头从零到交付的完整设计流程(含CodeV转换技巧) 本文详细介绍了6mm定焦镜头从专利库检索到最终交付的全流程设计,重点解析了CodeV与Zemax工具链的无缝衔接技巧。通过实际案例展示规格定义、专利筛选、结构适配、非球面优化等关键步骤,帮助光学设计工程师提升设计效率和制造良率。特别包含CodeV转换Zemax的实用技巧,适用于机器视觉和安防镜头开发。 阅读详情

     ----------------- android培训、java培训、期待与您交流! ----------------------

Comparable与Comparator的区别 

 |字号 订阅

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

Comparator位于包java.util下,而Comparable位于包   java.lang下

Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 String、Integer 自己就可以完成比较大小操作,已经实现了Comparable接口)   

 自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序,如API所说:
Sorts the specified list into ascending order, according to the natural ordering of its elements. All elements in the list must implement the Comparable interface
这里的自然顺序就是实现Comparable接口设定的排序方式。

而 Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。
  
可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。

用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。
  
比如:你想对整数采用绝对值大小来排序,Integer 是不符合要求的,你不需要去修改 Integer 类(实际上你也不能这么做)去改变它的排序行为,只要使用一个实现了 Comparator 接口的对象来实现控制它的排序就行了。


// AbsComparator.java     
import   java.util.*;

public   class   AbsComparator   implements   Comparator   {     
    public   int   compare(Object   o1,   Object   o2)   {     
      int   v1   =   Math.abs(((Integer)o1).intValue());     
      int   v2   =   Math.abs(((Integer)o2).intValue());     
      return   v1   >   v2   ?   1   :   (v1   ==   v2   ?   0   :   -1);     
    }     
}

    
可以用下面这个类测试 AbsComparator:     

// Test.java     
import   java.util.*;     

public   class   Test   {     
    public   static   void   main(String[]   args)   {     
    
      //产生一个20个随机整数的数组(有正有负)     
      Random   rnd   =   new   Random();     
      Integer[]   integers   =   new   Integer[20];     
      for(int   i   =   0;   i   <   integers.length;   i++)     
      integers[i]   =   new   Integer(rnd.nextInt(100)   *   (rnd.nextBoolean()   ?   1   :   -1));     
    
      System.out.println("用Integer内置方法排序:");     
      Arrays.sort(integers);     
      System.out.println(Arrays.asList(integers));     
    
      System.out.println("用AbsComparator排序:");     
      Arrays.sort(integers,   new   AbsComparator());     
      System.out.println(Arrays.asList(integers));     
    }     
}



 Collections.sort((List<T> list, Comparator<? super T> c)是用来对list排序的。


如果不是调用sort方法,相要直接比较两个对象的大小,如下:
Comparator定义了俩个方法,分别是   int   compare(T   o1,   T   o2)和   boolean   equals(Object   obj),
用于比较两个Comparator是否相等
true only if the specified object is also a comparator and it imposes the same ordering as this comparator.
有时在实现Comparator接口时,并没有实现equals方法,可程序并没有报错,原因是实现该接口的类也是Object类的子类,而Object类已经实现了equals方法

 Comparable 接口只提供了   int   compareTo(T   o)方法,也就是说假如我定义了一个Person类,这个类实现了   Comparable接口,那么当我实例化Person类的person1后,我想比较person1和一个现有的Person对象person2的大小 时,我就可以这样来调用:person1.comparTo(person2),通过返回值就可以判断了;而此时如果你定义了一个   PersonComparator(实现了Comparator接口)的话,那你就可以这样:PersonComparator   comparator=   new   PersonComparator();
comparator.compare(person1,person2);。
   ---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.youkuaiyun.com/heima

通信算法之334:无人机侦测-DJI 大疆云哨接收机系列 【代码】通信算法之334:DJI 大疆 云哨接收机算法流程。 阅读详情

相关推荐

【UE5】Vosk插件实战:离线语音识别与TTS朗读全流程解析

本文详细解析了如何在UE5中利用Vosk插件实现离线实时语音转文字功能。从环境配置、插件与模型准备,到核心C++组件封装与蓝图系统搭建,提供了完整的实战教程。重点解决了离线语音识别在游戏开发中的延迟、隐私和网络依赖问题,并演示了从语音识别到TTS朗读的完整交互闭环,为开发安全、实时的语音交互应用提供可靠方案。

weixin_29021291的博客 510

Comparator和Comparable的区别

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

m0_71087031的博客 1万+

STM32F103内部晶振配置实战:从代码修改到频率验证(附工程模板)

本文详细介绍了STM32F103内部晶振(HSI)的配置实战,从代码修改到频率验证的全流程,并附赠可直接使用的工程模板。通过对比HSI与外部晶振的优缺点,帮助开发者在成本敏感和空间受限的应用中实现稳定时钟配置,同时提供频率校准和常见问题排查方法。

weixin_29171087的博客 322

Comparable和Comparator的区别?

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

程序员Forlan的博客 2024

别再手动切换了!用SP3485+三极管搞定RS485自动收发电路(附完整原理图)

本文详细介绍了如何利用SP3485芯片和三极管设计RS485自动收发电路,解决传统手动切换带来的IO资源占用和软件复杂度问题。通过原理分析、电路设计拆解和实战注意事项,帮助工程师打造稳定可靠的自动收发通信模块,显著提升系统性能和可靠性。

weixin_26833939的博客 511

从零到一:用Python打造你的智能交互桌宠,附完整源码与打包指南

本文详细介绍了如何从零开始使用Python开发智能交互桌宠,涵盖环境配置、窗口创建、动图加载、交互功能实现及打包发布全流程。教程特别适合零基础开发者,通过完整源码和分步指南,帮助读者快速掌握桌面宠物开发技巧,打造个性化AI伴侣。

weixin_29094539的博客 292

Comparable和Comparator的 区别

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

FaizOrange的博客 1841

Unity开源游戏源码精选:17个亲测可运行教学项目

Unity游戏开发中,掌握真实项目结构与工程实践远比熟记API更重要。本文围绕‘Unity开源项目’和‘游戏源码’两大核心概念,解析高质量开源资源的本质特征——结构清晰、逻辑可溯、修改即时反馈。从基础的MonoBehaviour生命周期组织,到进阶的ScriptableObject数据驱动、事件总线解耦,再到架构级的DOTS ECS设计与网络同步模式,技术价值在于将抽象原理落地为可调试、可验证、可迁移的代码范式。适用于新手建立开发直觉、中级开发者突破系统设计瓶颈,以及团队构建可维护框架。所有项目均基于Uni

weixin_31528001的博客 716

Comparable和Comparator区别

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

qq_64847107的博客 1053

SAP FI 会计科目表(COA)可直接套用配置模板

摘要:本文提供了SAP S/4HANA环境下可直接套用的会计科目表(COA)配置模板,包含科目编码规则、号段规划、科目组设置等核心内容。模板采用10位数字编码,按资产(1000)、负债(2000)、权益(3000)、成本(4000)、收入(5000)、费用(6000)六大类划分号段,并预设科目组控制字段状态。适用于集团/单一公司、国内/跨国企业场景,支持多表架构映射,配置完成后可通过事务码SAKO验证科目清单。模板遵循"前4位固定一级科目"原则,企业可根据行业特性调整明细科目。

金牌架构师 266

C语言试题一之计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和

1、题目 计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和 2、源代码实现 #include <stdio.h> #include <math.h> double fun1(int n) { if (n <= 0) return 0; int i; double sum = 0.0; for (i = 1; i <= n;...

码莎拉蒂 1万+

comparable 和 comparator的区别

Comparable和ComparatorComparable:适用于对象有自然顺序,且该顺序对大多数情况都适用的场景。它使得类本身具有排序能力,排序逻辑内嵌于类中。Comparator:适用于需要多个排序规则,或者不能修改类本身的场景。它将排序逻辑独立于类之外,提供了更大的灵活性。

Flying_Fish_roe的博客 1314

YOLO11涨点优化:loss优化 | 一种新的基于Wasserstein距离的小目标检测评估方法,助力小目标涨点

提出了一种新的基于Wasserstein距离的小目标检测评估方法,通过它们对应的高斯分布计算它们之间的相似性

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1015

黑马程序员------学习Comparator和Comparable方法理解

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------  Comparator和Comparable的方法比较 1.Comparator和Comparable相同的地方 他们都是java的一个接口,并且是用来对自定义的class比较大小的,什么是自定义class:

MickeyMouse的博客 406

老版QQ原生表情gif动态

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

黑马程序员------TreeSet集合框架存储自定义元素之排序Comparable与Comparator

------- android培训、java培训、期待与您交流! ---------- TreeSet集合框架存储自定义元素之排序Comparable与Comparator 我们知道,往TreeSet中存入的元素是要具有比较行的,TreeSet是要默认为元素排序的,但是我们如果存储的元素对象自身不具备比较性怎么办?有两种方式来解决这个问题,就要用到Comparable与Comparator

aurora_bessie 501

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

黑马程序员_java--comparable和Comparator 的区别

------- android培训、java培训、期待与您交流! ---------- Comparable & Comparator 都是用来实现集合中的排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。当需

jason123_45的专栏 350

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

黑马程序员——Comparable接口和Comparactor接口的使用以及分析

大纲:本篇博客主要对Comparable接口、Comparactor接口和Arrays.sort()、Collections.sort()方法的学习使用进行介绍,是因为做基础测试题和答题才知道这两个接口,题目已经提交,但是对两个接口的详细使用和区别却是一知半解,只是感觉它们有点类似,就抽出时间搞清楚,下面是学习的

十指空间 959

黑马程序员_Java集合总结(二)

---------------------- android培训、java培训、期待与您交流! ---------------------- 一、set(集)            特点;里面的数据不能有重复  储存的顺序不能确定  索引不能访问其中具体数据

zwq5337的专栏 298

【黑马程序员】API知识总结

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------  【 黑马程序员】API知识总结 分类: JAVA2013-09-06 21:50 110人阅读 评论(0) 收藏 举报 ---------------------- ASP.Net+Android+IO

xftdfuao的专栏 527

黑马程序员学习6

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

黑马程序员学习 299

黑马程序员-集合框架

——-android培训java培训期待与您交流!———-介绍 出现的原因:面向对象语言对事物的体现都是以对象的形式存在,为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。集合就是将若干用途、性质相同或相近的”数组”组合而成一个整体。 数组和集合的不同:数组可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。 集合的特点:集合只用

jyhonggang13848的专栏 434

4/10笔记

黑马程序员全套Java教程笔记 p267 Collections的概述和使用: 快捷键: Ctrl + Alt + B :跳转到方法实现处 Ctrl + Q :在editor window中显示java docs这个功能很方便–因为有时仅仅是忘记了自己编写的方法中的某个参数的含义,此时又不想再起一个浏览器来查看java doc,此时这个功能的好处就体现出来了 Ctrl + /:单行注释 Ctrl + Shift + / :多行注释 Shift + F6 :提供对方法、变量的重命名 Ctrl+D :复制当前

Nina19980917的博客 202

黑马程序员-集合框架的Set集合

------- android培训、java培训、期待与您交流! ---------- package it.heima.mylog; /**  * 知识点:集合框架Collection的子接口Set集合  *   * Set集合:元素不可以重复,没有顺序。  * Set接口下的常用子类:HashSet,TreeSet,LinkedHashSet  *   * HashSe

u011402948的专栏 460

黑马程序员——集合类

一、集合类的由来 对象用于封装特有数据,对象多了需要存储;如果对象的个数不确定,就使用集合容器进行存储。 集合特点: 1. 用于存储对象的容器。 2. 集合的长度是可变的。 3. 集合中不可以存储基本数据类型值。 集合容器因为内部的数据结构不同,有多种具体容器。不断的向上抽取,就形成了集合框架。 经典问题:数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固

qq_28592367的博客 358

黑马程序员——java基础之string及集合

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------    前记:这篇写的比预期时间晚了1天多,因为中间有事耽误了一天。另外参阅了其他同学的博客,发现自己写的时候没有注重格式,因而导致不是很美观,而且调理性不够,接下来的几篇后有所注意。    对于java类的学习,有String类和集合类两处的学习,由于有部分学习的不佳,但是又不难慢了进度,因

wsz225005的博客 558

黑马程序员_集合之单列集合

------- android培训、java培训、期待与您交流!---------- 为什么要有集合? 出现意义:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。 集合与数组辨析 一.容器长度 1)集合长度可变 2)数组长度固定 二.存储内容类型 1)集合存储引用数据类型 2)数组存储任意类型

liudekun815640232的博客 400
上一篇: "黑马程序员"张老师Java高新技术学习(注解、类加载器)
下一篇: “黑马程序员”正则表达式的学习日志
tangjinjava
博客等级 码龄16年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值