热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javacomparable接口_JavaComparator比较器的使用场景(较于Comparable比较器)

Java类在什么情况下推荐实现Comparable接口?在了解Comparator比较器之前,建议先了解Comparable比较器。上面一篇文章是之前对

Java类在什么情况下推荐实现Comparable接口?

在了解Comparator比较器之前,建议先了解Comparable比较器。上面一篇文章是之前对Comparable接口的整理。

Comparator和Comparable

很多人知道,想要对类进行比较,需要实现Comparable接口,并实现该接口中的compareTo()方法。如果对象需要进行比较,这是最常见也是推荐的的实现方式。那么Comparator在什么情况下使用呢?比如一个类在设计时没有实现Comparable接口,而后面又需要对其进行比较,这时可以通过Comparator实现;另一种情况是,一个类有多种比较维度,比如有一个Person类,我们有时候要用体重比较、有时候要用身高比较,这也可以通过Comparator实现(当然强行用Comparable也可以实现)。

有人将Comparable称为内比较器,将Comparator称为外比较器。因为通过Comparable接口,在目标类内部实现compareTo()方法,所以称为内比较器,下面看一下Comparator为什么被称为外比较器。

示例:Comparator比较器实现

比如现在我们有这样一个类:

de1866bd90c0229332282e52a6cb5fa9.png

Peoplelei

一般情况下如果想要对People对象进行比较,比如根据身高或者体重,需要实现Comparable接口。但假设这个类是其他系统的类,我们没有权限修改,无法添加接口。这时可以使用Comparator接口来实现。我们实现两个Comparator类,一个根据身高比较,一个根据体重比较:

65780fd6af9a1af1580639e50087c0ee.png

两个Comparator实现类

下面就可以对People类新型比较了。我们在测试类中用排序算法来验证一下:

31b1e639f574b3096351a89c4ea67869.png

测试方法

结果是:

6221f91ee643f904c94838572c981f58.png

输出结果

从上面这个例子可以看到,我们没有对原People类进行任何修改,只是在外部定义了新类并实现了相应的Comparator接口,就可以对People类实现比较。所以将Comparator称为外比较器。提一下,例子中这两个比较器的实现可以想到设计模式中的策略模式。

另外要说明一点的是,Comparator不像Comparable接口一样只有一个方法,Comparator接口中除了compare()方法外还包含很多方法。大家可以看文档了解一下。



推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
author-avatar
你的美丽来自我的设计
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有