Java comparable和Comparator接口的区别

Java中Comparable和Comparator接口的区别 Comparable 简介 Comparable 是排序接口 若一个类实现了Comparable接口,就意味着“该类支持排序”。此外,“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。 接口中通过x.compareTo(y)来比较x和y的大小。若返回负数,意味着x比y小;返回零,意味着x等于y;返回... 阅读详情

初次学习java接口和集合框架,对里面的比较和排序,总是一知半解。今天查阅资料,加深了理解,总结如下。

1. Comparable接口可以说成是“自然比较器”,是标准类库中自带的比较器,很多类都实现了该接口,比如Integer、String等。该接口只提供一个方法:compareTo


实现了该接口的类,可以使用Arrays.sort()方法。

2. Comparator接口是外部比较器,该接口有很多方法。使用场景:当我们需要的比较规则,Comparable接口无法满足时,可以使用这个接口来实现自定义比较规则。

Arrays.sort()和TreeSet等类中就可以使用新定义的接口规则。

举例说明:

a. Integer实现了Comparable接口,但是比较规则是按实际值比较,如果需要按照别的规则对数值进行比较,例如,通过绝对值进行比较大小,则需要自定义比较器Comparator。

该段例子,引用自:http://blog.youkuaiyun.com/mageshuai/article/details/3849143

import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;

/**
 * comparator是外部比较器,comparable是内部比较器。
 * 本例中,当integer的comparable接口的排序规则不是我们所需要的时候,通过实现comparator接口,完成用绝对值排序的算法。
 * @author 
 *
 */

public class ComparatorVsComparableDemo implements Comparator<Integer>{
	public int compare(Integer int1, Integer int2) {
		int v1 = Math.abs(int1.intValue());
		int v2 = Math.abs(int2.intValue());
		return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
	}
	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(10)   *   (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   ComparatorVsComparableDemo());     
	      System.out.println(Arrays.asList(integers));     		
	}
}

详解Java中Comparable和Comparator接口的区别 主要介绍了详解Java中Comparable和Comparator接口的区别的相关资料,希望通过本文大家能彻底掌握这部分内容,需要的朋友可以参考下 立即下载

相关推荐

模拟ic入门——设计一个单极运放(一)单级运算放大器设计基础

主要介绍了单级运放的基本理论和使用场景

qq_64956710的博客 3743

Comparator和Comparable的区别

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

m0_71087031的博客 1万+

图解说明JLink驱动与目标板电源匹配的关键细节

深入讲解JLink驱动安装及使用过程中,如何正确匹配目标板电源,避免常见通信故障。通过图解方式清晰展示关键连接细节,确保调试稳定可靠,是嵌入式开发中不可或缺的实战经验分享。

weixin_42173218的博客 431

Comparable和Comparator接口有什么区别?

相同点: Comparable 和 Comparator 都是用来实现集合中元素的比较、排序的 不同点: 1 接口定义的方法不同 Comparable接口里面的方法是 public int compareTo(T o); 在java.lang包下 Comparator接口里面的方法是 int compare(T o1,T o2); 在java.util包下 2 Comparable 是在集合内部定...

不见风雨怎能见彩虹 1万+

期末求生指南:手把手教你用浏览器开发者工具绕过百一测评切屏检测

本文详细介绍了如何利用浏览器开发者工具绕过百一测评的切屏检测功能。通过分析JavaScript事件监听机制,定位关键检测代码,并提供实时调试和本地覆盖两种修改方法,帮助学生在遵守规则的前提下更灵活地应对在线考试。文章还包含风险控制和替代方案等实用建议。

weixin_28698059的博客 550

基于DO-178C/331的飞控软件研发环境的研究

本研究提出了一套基于DO-178C/331标准的飞控系统软件开发和验证框架。通过优化模型库的设计、代码生成配置和测试验证流程,显著提升了飞控系统软件的开发效率和安全性。未来的研究可以进一步扩展模型库的功能,以适应更复杂的飞控系统需求。

qq_41854911的博客 561

Comparable接口和Comparator接口的区别

Comparable接口和Comparator接口的区别

lc257的博客 2997

015、PCIE带宽计算:理论vs实际——调试手记

最近在调一块图像采集卡,主控抱怨数据吞吐量上不去。规格书上写着PCIE 3.0 x4,理论带宽接近4GB/s,实际测试却卡在2.5GB/s左右。硬件同事拍胸脯说链路训练正常,软件同事咬定DMA配置没问题——这种场景是不是很熟悉?

z534437748的博客 880

来吧,一文彻底搞懂Java中的Comparable和Comparator

大家好,我是沉默王二,周末在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题。比如说:Java 的 Comparable 和 Comparator 是兄弟俩吗?像这类灵魂拷问的主题,非常值得深入地研究一下。 另外,我想要告诉大家的是,我越来越喜欢这个系列的文章了,不知道大家有没有同样的感觉?假如有的话,那我就太荣幸了。总之,写的越多,我越发现,散落在海滩上的一颗颗珍珠被...

沉默王二 1万+

手把手教你学Simulink——基于Simulink的无迹卡尔曼滤波(UKF)控制仿真建模示例

本文详细介绍了在Simulink中实现无迹卡尔曼滤波(UKF)控制倒立单摆系统的完整过程。通过对比扩展卡尔曼滤波(EKF),重点阐述了UKF在处理强非线性系统时的优势:采用无迹变换(UT)通过确定性采样捕捉非线性特性,精度可达三阶泰勒展开且无需计算雅可比矩阵。文章分步骤讲解了状态空间定义、UKF参数设计、Simulink实现方法,以及结合LQR控制器的闭环系统搭建,并通过仿真验证UKF在大角度偏移情况下具有更优的估计精度和控制性能。最后还讨论了工程实践要点和扩展方向,为非线性系统控制提供了实用解决方案。

MHD0815的博客 96

华为OD机试真题2026双机位C卷 C语言 实现【明日之星选举】

给定一组选票votes。votes[i]代表第 i 张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan为明日之星,反对 hanmei 称为明日之星。赞成或反对使用逗号(,)分割。 给定一个数组n,表示最后将筛选出赞成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。

MISAYAONE的博客 184

别再手动编译了!用Docker 30秒搞定Redis 7.2.4,顺便解决gcc版本那些坑

本文详细介绍了如何使用Docker快速部署Redis 7.2.4,避免传统手动编译安装中的gcc版本冲突等问题。通过容器化技术,开发者可以在30秒内完成Redis的部署,并支持自定义配置和性能优化。文章还提供了可视化监控方案和高级部署模式,帮助用户轻松管理Redis实例。

weixin_30600197的博客 541

【DRAM存储器六十七】DDR5介绍--训练相关之write leveling

详述DDR5 write leveling细节

highman110的博客 288

Java中Comparable和Comparator接口的区别(看完这篇别再分不清了!)

各位老铁们(敲黑板),咱们程序员在日常开发中是不是经常遇到这样的场景:给对象列表排序时,突然发现方法报错了?或者想实现多种排序方式时,代码越写越乱?今天咱们就来盘一盘Java中两大排序神器——Comparable和Comparator的区别!这个接口就像给对象打上的"胎记"(划重点),实现了它的类就天生具备排序能力。@Override// 按分数降序排列这个接口就像个"外挂",可以在不修改原有类的情况下,给对象添加多种排序方式。// 按姓名排序// 按年龄升序。

cloudcruiser的博客 1907

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java中Comparator 和 Comparable 接口的区别

Java中Comparator 和 Comparable 接口的区别

m0_50742275的博客 1023

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java 中Comparator 和 Comparable接口的区别

Java 中Comparator 和 Comparable接口的区别

weixin_42320587的博客 704

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

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

java中Comparator和Comparable接口区别分析

/** *@ author StormMaybin *@ date 2016-10-01 */ 生命不息,奋斗不止! 首先,Comparator和Comparable都是接口,具有共同的功能,对于一个实体类进行排序的功能。 Comparator简介      强行对某个对象 collection 进行整体排序 的比较函数。可以将 Comparator 传递给 sort 方法(如 Collect

StormMaybin的博客 2438

java comparable与_详解Java中Comparable和Comparator接口的区别

详解Java中Comparable和Comparator接口的区别本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧。Comparable 简介Comparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Comparable接口的类支持排...

weixin_34987986的博客 534

Java中Comparable和Comparator接口的区别:看完这篇别再傻傻分不清了!

各位Javaer应该都遇到过这样的场景(拍大腿)——你写了个Employee员工类,现在需要按工资排序。这时候你发现Java集合框架的Collections.sort()根本不买账!Comparable和Comparator。(敲黑板)这俩兄弟长得像双胞胎,但性格迥异!今天就带大家扒一扒它们的底裤,保准你下次用的时候不再犯选择困难症!Comparator.nullsFirst(Comparator.naturalOrder()) // null排最前。

2509_91393034的博客 1154

Java中Comparable接口与Comparator接口的区别

一、 Java的命名规则讲究“见名知意”,compare(比较、对比)这个词我们非常熟悉,那么也基本知道Comparable接口与Comparator接口是干嘛的啦,其作用就是比较,这样可以方便对数组、集合类进行排序。因为可以直接调用Arrays.sort(数组)方法或Collections.sort(集合类)方法,而且通过翻看源码,我们发现这两个方法的底层实现确实是基于Comparable接口与Comparator接口的。 不同点: 1.接口中规定的方法不同 Comparable接口中是:public i

dabusiGin的博客 525

Java基础篇 —Comparable接口与Comparator接口的使用及区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言概念 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了.

m0_63330888的博客 1807

java 实现Comparable接口和实现Comparator接口排序的区别

这取决于Collections.sort()方法是否传入了自定义Comparator排序规则,如果传入了自定义Comparator排序规则那以Comparator为准否则以Comparable为准。

weixin_40323532的博客 1529

Java中Comparable接口和Comparator接口的区别(如果想知道Java中Comparable接口和Comparator接口的区别,那么只看这一篇就足够了!)

Java中Comparable接口和Comparator接口的区别(如果想知道Java中Comparable接口和Comparator接口的区别,那么只看这一篇就足够了!)

秋刀鱼不做梦的编程日常 3994

java比较器Comparable接口和Comparator接口之间区别

java的比较器有两类,分别是Comparable接口和Comparator接口。在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口。让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用或者Collections.sort来排序对象数组,实例如下:import java.io.Serial...

随风而来的温柔 756

Java中Comparator接口与Comparable接口区别

Java中Comparator接口与Comparable接口引用头文件区别comparable调用Comparator方法调用总结 引用头文件 Comparator位于包java.util下,而Comparable位于包 java.lang下 区别 Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的...

敌人派的博客 385
上一篇: JAVA多态性的理解
下一篇: java核心技术卷1内容总结
CodeFellow
博客等级 码龄10年 6粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值