Comparable与Comparator

Java中Comparable与Comparator的原理及使用 在排序任务中,可将其分为自然排序:数值大小、字符Asics码序列的排序;客户化排序:也即通过自定义的序列方式进行排序。 1. 自然排序 在JDK类库中,有一部分类实现了Comparable接口,如Integer Double和String等,如下Integer类实现了Comparable的接口,通过重写compareTo方法定义了排序的规则: 返回值 含义 -1 大于 0 等于... 阅读详情

Comparable与Comparator

Comparable 和 Comparator 都是用来实现集合中元素的比较、排序的。

只是 Comparable 是在集合内部定义的方法实现的排序,而Comparator 是在集合外部实现的排序,

所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。

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

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

自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序,这里的自然顺序就是实现Comparable接口设定的排序方式。

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

用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。

1.Comparable用法示例:

需求:

每一个学生都有对应的归属地。
学生Student,地址String
学生属性:姓名,年龄
注意:姓名和年龄相同的视为同一个学生,保证学生的唯一性。

1.描述学生。
2.定义map容器,将学生作为键,地址作为值。存入。
3.获取map集合中的元素。

A.(代码MapTest.java)

package com.zlc.collection;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

class Student6 implements Comparable{
private String name;
private int age;
public Student6(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

public String toString(){
return “姓名:”+name+”–>年龄:”+age;
}
//复写hashCode()和equals()方法
public int hashCode() {
return name.hashCode()+age*34;
}
public boolean equals(Object obj) {
if(!(obj instanceof Student6)) {
throw new ClassCastException(“类型不匹配–>不是学生对象”);
}

Student6 s = (Student6) obj;
return this.name.equals(s.name) && this.age == s.age;
}
@Override
public int compareTo(Student6 o) {
int num = new Integer(this.age).compareTo(new Integer(o.age));

if(num == 0){
return this.name.compareTo(o.name);
}
return num;
}
}

public class MapTest {

public static void main(String[] args) {
HashMap

深度剖析—Comparable和Comparator 1. 需要被排序的对象实现Comparable 接口,所以可以认为比较的属性是对象本身已经有了的,所以我们将由Comparable 实现的排序叫做自然排序 2. 当Comparable 实现的排序不能满足需求的时候,你可以使用Comparator 进行排序,这个往往是因为需要排序的对象的类的定义已经存在的时候(或者说是这个类不是你定义的) 3. 有时候我们可以使用Comparator 提供的两个方法来改变Comparable的排序类型,或者说是排序方向 阅读详情

相关推荐

利用eds editor生成CANOPEN 设备eds文件

通过以上步骤,您可以根据实际设备的功能特性,自动生成一份符合CANopen协议标准的电子数据表(EDS文件),该文件可以被上位机软件或其他CANopen主站设备用于识别、配置和控制您的CANopen从站设备。使用CANopen EDS Editor生成CANOPEN设备的EDS文件是一个系统化的过程,它涉及将设备的具体技术参数和功能映射到CANopen规范定义的对象字典中。

weixin_38604759的博客 6458

深入理解Java比较器(Comparable和Comparator)

若一个类实现了Comparable接口,就意味着该类支持排序。实现了 Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。 对于我们想从其他成员变量来排序,那么此时我们就需要比较器来实现。

qq_45830276的博客 5593

帆软报表JS导出避坑指南:如何正确处理sessionid和参数传递

本文深入探讨了帆软报表中通过JavaScript实现一键导出的关键技术,重点解析了如何正确获取并传递sessionid以确保会话不丢失,以及如何构造包含必要参数的导出URL。文章详细对比了预览后导出与直接URL导出两种方式的差异,并提供了从参数拼接、前端触发下载到高级场景(如SPA集成)的完整避坑指南,帮助开发者构建稳定可靠的自定义导出功能。

weixin_42522857的博客 162

Comparable和Comparator的区别?

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

程序员Forlan的博客 2025

GIS常用坐标系简介

EPSG:4326是基于WGS 84的地理坐标系,使用经纬度表示,适用于全局定位和地理数据表示。它的缺点是在进行距离、面积计算等地理分析时不够准确。EPSG:3857是投影坐标系,使用平面米坐标表示,适用于在线地图展示,特别适合 Web 地图应用。虽然它在地图展示中很高效,但由于投影引起的变形问题,它不适合高精度地理测量和计算。

weixin_59096287的博客 1977

[Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--地图(一)

上面3章图是完成后的效果图 游戏已完成,除了英雄外,基本还原了90%的游戏内容,一共13关,20种防御塔,30+种敌人,如上图,以假乱真吧 下面从地图模块起介绍我的方法,如有更好的方法,请留言一起讨论,游戏资源下载原版游戏数据包,解压即可 推荐一款软件,TextureUnpackerRelease1.04可以分割plist形式的图片,提高效率 经过一个月学习也发现之前有很多化简为繁的错误

7172

Comparable和Comparator的使用详解

在实际业务开发中,常常看到使用compareTo,compare方法进行值得比较、排序,compareTo方法来自于Comparable接口,而compare方法则来自于Comparator接口,两个接口都是顶层接口。Comparable翻译为中文是“比较”的意思,而Comparator是“比较器”的意思。Comparable是以-able结尾的,表示它自身具备着某种能力,而Comparator是以-or结尾,表示自身是比较的参与者。虽然Comparable和Comparator都是用来进行元素排序的,但二

qq_45738291的博客 1682

FPGA数字下变频实战:用Vivado DDS IP核实现IQ采样与频率校正(附MATLAB仿真对比)

本文提供了一份基于Vivado DDS IP核实现FPGA数字下变频(DDC)的完整工程指南。详细阐述了IQ采样的原理、DDC链路构建、DDS频率校正的工程实现,并重点介绍了如何利用MATLAB搭建黄金参考模型进行全链路仿真与对比验证,分享了关键的调试技巧与性能优化建议。

t1u2v的博客 811

Comparator和Comparable的区别

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

m0_71087031的博客 1万+

西门子工业物联网云平台 Insights Hub 技术白皮书

Insights Hub是西门子公司推出的工业物联网云平台,它是一个使用开放技术的基于云架构的平台,能够为制造业企业提供物联网连接、数据分析、应用开发等一系列服务。Insights Hub的设计理念是“连接、分析和运营”,即通过连接物理设备、收集数据并进行分析,来优化工业生产的运营和管理。

可爱的刘三岁的博客 3335

震惊!用刚发布的GPT-5写研究现状,文献综述写作一整个大逆袭(附步骤+10条AI提示词)

每类分别给出:国内重点(3 条)、国外重点(3 条)、代表性方法(2–3 条)、代表成果(各 1–2 条)、主要问题(2 条)。每个场景给出:技术方案(2–3 种)、研究目标、实际成效/案例、当前挑战(3 点)。指令:基于国内外现状,系统列出当前学界的研究空白、关键未解问题与争议焦点(每项配简要证据/示例),并针对每个空白提出 1–2 条可行的研究方向或方法路径。三、差异与研究空白分析(≥300 字)。对每个小节提供:小标题、中心论点(1 句)、拟写要点(3–5 条)、建议引用类型(理论/方法/案例)。

qq_64378896的博客 114

com.google.common.collect.Range 集合计算

1.构造Range实例必须使用Range中的静态方法,因为Range的构造方法被设置为private,当a > b使,或者当a == b且为(a,b)时会抛出IllegalArgumentException (a,b) Range.open(a, b) (a, b] Range.openClosed(a, b) [a, b] ...

诚的博客 1686

【Docker】常见容器问题解决#OCI runtime create failed: container_linux.go:349: starting container process

ERROR: for nginx Cannot start service nginx: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/data/docker-compose/n

liu_chen_yang的博客 5528

Comparable 和 Comparator 接口的区别

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

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

老版QQ原生表情gif动态

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

Java中Comparable与Comparator

Java中Comparable与Comparator的区别

m0_46596099的博客 2031

蓝牙模块HM-10手册

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

Comparable与Comparator浅析

  今天博主在翻阅TreeMap的源码,发现其键必须是实现Comparable或者Comparator的接口时产生了一些兴趣,比如在TreeMap中的put方法分别对Comparable和Comparator接口分别进行处理。那么疑问就来了,Comparable和Comparator接口的区别是什么,Java中为什么会存在两个类似的接口?   Comparable和Comparator接口都是用...

朱小厮的博客 2万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Comparable 与 Comparator

Comparable 是“比较”的意思,而 Comparator 是“比较器”的意思;Comparable 是通过重写 compareTo 方法实现排序的,而 Comparator 是通过重写 compare 方法实现排序的;Comparable 必须由自定义类内部实现排序方法,而 Comparator 是外部定义并实现排序的。所以用一句话总结二者的区别:Comparable 可以看作是“对内”进行排序接口,而 Comparator 是“对外”进行排序的接口。

SuYuewu的博客 613

详解Comparable和Comparator

如果是想要以score为基准Comparable接口的功能就是用于对象之间的比较。那个也就是说比较的主要实现逻辑就在compareTo方法中。,从大到小排序,只需要把compareTo中的this和o调换位置即可。

qq_63525426的博客 1644

comparable与comparator

先来说说基本的认识:comparable与comparator两者都是接口,实现的方法都是对对象进行排序。 comparable 这个词是以able结尾的,说明是一种能力,一种属性,可参见Serializable,继承了该接口就可以实现序列化了。那么继承 comparable并且重写compareTo方法,就可以让该类的对象拥有与其他同类对象的比较能力。 这是该...

weixin_39634532的博客 306

64. Comparable 与 Comparator

Java中的Comparable接口定义了对象的自然排序规则,通过实现compareTo()方法实现比较逻辑。该方法返回负值、零或正值分别表示小于、等于或大于比较对象。实现需满足自反性、对称性和传递性等要求,建议与equals()方法保持一致。典型应用包括集合排序(如Collections.sort())和有序集合(如TreeSet)。实现时需注意数值比较的溢出风险,推荐使用Integer.compare()等静态方法。

weixin_43484713的博客 984

Java-Comparable与Comparator

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程​​。

了解➔熟悉➔掌握➔精通 935

Comparator和Comparable

都是Java中用于对象排序的接口,它们各有优劣,适用于不同的场景。理解它们的区别和使用方法,对于编写清晰、高效的排序代码至关重要。在实际开发中,应根据具体需求选择合适的接口,实现所需的排序逻辑。都是用于排序的接口。它们提供了自定义对象排序的机制,但实现方式和使用场景有所不同。的区别与联系有所帮助。希望以上内容对您理解。

liu_rockefeller的博客 930

Java中的Comparator 与 Comparable详解

由于自己在写算法题目的时候遇到了Comparable和Comparator,但是不会使用,这里就记录一下他们如何使用以及他们的区别。

qq_43751200的博客 1780

Comparable和Comparator的区别

简述Comparable和Comparator的区别

weixin_55758279的博客 1103

Comparable与Comparator的区别

而有些自定义类型,或者你想实现一种特殊的排列的时候,就需要一个比较器来完成两个对象之间的比较,也就是指定使用Comparator(临时规则排序,也称专门规则排序),如果不指定Comparator,那就用自然规则排序,在这里的自然规则排序就是实现Comparable接口设定的排序方式。等基本类型的封装类都已经实现了Comparable的接口,这些类对象本身就可以直接比较,直接调用Collections.sort()即可,无需自己实现Comparable接口。2、比较者等于被比较者,那么返回0。

loss_rose777的博客 9096

Comparable和Comparator

Java比较器Comparable和Comparator详解 排序原理简介 数组Arrays.sort()排序原理 通过Java API文档知道,Arrays.sort()调用的是DualPivotQuicksort.sort()方法,如下代码片段所示: public static void sort(int[] a) { DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0); } DualPivotQuicksort.s

Gandoph的博客 1171
上一篇: Java集合的用法和比较
下一篇: Comparable 和 Comparator
剑之所向
博客等级 码龄11年 228粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值