Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >何时使用比较和比较器

何时使用比较和比较器
EN

Stack Overflow用户
提问于 2010-02-15 15:12:54
回答 19查看 120.3K关注 0票数 120

我有一个需要对字段进行排序的对象列表,比如Score。我不假思索地写了一个新的类,实现了比较器,它完成了这个任务,并且它工作了。

现在回过头来看,我想知道我是否应该让我的类实现可比较,而不是创建一个实现比较器的新类。分数是对对象进行排序的唯一字段。

  • 是正确的方法“首先让类实现可比较的(对于自然排序),如果需要可选的字段比较,然后创建一个实现比较器的新类”?

  • 如果上面的(2)是真的,那么是否意味着只有在让类实现可比较之后才应该实现比较器?

  • 如果上面(2)是真的,那么是否意味着只有在类实现可比较之后才应该实现比较器?(假设我拥有原始类)。
EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2010-02-15 15:18:21

我会说,一个对象应该实现可比较,如果这是对类进行排序的明确自然的方法,并且任何需要对类进行排序的人通常都希望这样做。

但是,如果排序是类的一种不寻常的使用,或者排序只对特定用例有意义,那么比较程序是更好的选择。

换句话说,给定类名,是否清楚可比较对象将如何排序,或者您是否必须读取javadoc?如果是后者,那么未来的每个排序用例都需要一个比较器,在这一点上,实现可比较可能会减慢类的用户,而不是加快他们的速度。

票数 83
EN

Stack Overflow用户

发布于 2010-02-15 15:17:46

使用Comparable如果您想定义相关对象的默认(自然)排序行为,通常的做法是使用技术或自然的(数据库?)此对象的对象的标识符。

如果要定义外部可控排序行为,请使用Comparator,这可以覆盖默认的排序行为。

票数 133
EN

Stack Overflow用户

发布于 2010-02-15 15:21:33

使用Comparable

如果对象在您的控制范围内,则为

  • 。如果比较行为是主要比较行为,则为

使用Comparator

  • 如果对象不在您的控制范围之内,并且您不能让它们实现您想要的行为,则比较与默认(由Comparable指定)行为不同的行为。
票数 61
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2266827

复制
相关文章
React组件方法中为什么要绑定this
上例仅仅是一个组件类的定义,当在其他组件中调用或是使用ReactDOM.render( )方法将其渲染到界面上时会生成一个组件的实例,因为组件是可以复用的,面向对象的编程方式非常适合它的定位。根据this指向的基本规则就可以知道,这里的this最终会指向组件的实例。
大史不说话
2019/03/01
9200
Git验证失败的问题
在拉去项目的时候会进行一次身份验证,如果第一次输入失败后,之后拉取项目会一直报认证失败,这时候需要对本地的账号密码管理进行删除
明知山
2020/09/03
1.6K0
如何在Mule 4 Beta中实现自动流式传输
原文地址:https://dzone.com/articles/how-automatic-streaming-in-mule-4-beta-works
Steve Wang
2018/06/07
2.3K0
蓝鲸单机离线部署:app_mgr组件安装失败解决
之前在腾讯蓝鲸智云-单机离线部署测试中,遇到了几个安装问题,本文记录下3.2 app_mgr组件安装失败 的解决过程,因为这个问题卡了很久(可能也是因为笔者对python相关知识和蓝鲸产品不够熟悉),虽然最终解决了,但过程本身更值得记录。
Alfred Zhao
2020/03/08
2.2K0
muleESB简介和安装(一)
在开始学习muleESB之前,我们先看什么是mule和什么是ESB。可以帮助我们深入的学习和理解。
程序猿小亮
2021/01/29
4.1K0
java 实现登录验证码 (kaptcha 验证码组件)
而 kaptcha工作的原理,是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片。同时将生成的验证码字符串放到 HttpSession中,直接从session中获取这张验证码图片,而不会占用实际内存。
Krry
2019/03/23
8.3K0
App 组件化/模块化之路——Repository 模式
Repository 这个词直译过来仓库、仓储的意思。这个意思其实也能反应出 Repository 模式作用。App 开发中少不了对数据的操作,数据的来源可能有很多种:网络、数据库、文件以及内存中的缓存。而 Repository 就相当于一个仓库管理员,管理这些数据的存储。当业务层想要获取或者存储数据时,只需要通过 Repository 的管理员进行操作。这样的好处就是:屏蔽数据来源的操作接口。对于业务层来说不必关心数据存在哪里,以及如何存储的。而且也符合我们组件化/模块化架构设计的思想。即当我们更换数据存储设备时,例如从 Android 系统 Sqlite 数据转换为第三方的数据库时,不会影响到业务逻辑。
阳仔
2019/07/31
2K0
App 组件化/模块化之路——Repository 模式
MULE新手入门
对于新手来说,可能最需要的是先了解mule的基础知识和语法,这时,可以先看《MULE_3.2_节点详解.pdf》,了解mule的结构、常用参数获取方法、一些基础控件。 好了,现在已经对mule有了初步的了解了,然后练习几个例子,可以参考《mule-esb-examples.pdf》文档。里边有很多的例子,对于一般使用就够用了。 下面,要深入的了解了,这个时候就需要看用户手册了,可以查看《Mule ESB 3 User Guide.pdf》文档。 以上的文档都是比较早的版本,mule从3.5开始、3.6、
Java学习123
2018/05/16
3.6K0
WPF 如何在绑定失败异常
在开发 WPF 程序,虽然 xaml 很好用,但是经常会出现小伙伴把绑定写错了。因为默认的 VisualStudio 是没有自动提示,这时很容易复制粘贴写出一个不存在的属性。 在 xaml 如果绑定失败了,那么内部会有一个异常,但是 WPF 不会把这个异常抛出来,这个异常也不会让用户拿到,只是会在输出窗口提示。但是异常会影响性能,而且会让界面和设计的不一样,所以我就想在找到绑定异常就抛出,弹出窗口告诉小伙伴。 本文会告诉大家如何找到绑定失败,并且抛出异常,如何防止修改属性名让xaml绑定失败。
林德熙
2022/08/04
1.4K0
WPF 如何在绑定失败异常
在开发 WPF 程序,虽然 xaml 很好用,但是经常会出现小伙伴把绑定写错了。因为默认的 VisualStudio 是没有自动提示,这时很容易复制粘贴写出一个不存在的属性。 在 xaml 如果绑定失败了,那么内部会有一个异常,但是 WPF 不会把这个异常抛出来,这个异常也不会让用户拿到,只是会在输出窗口提示。但是异常会影响性能,而且会让界面和设计的不一样,所以我就想在找到绑定异常就抛出,弹出窗口告诉小伙伴。 本文会告诉大家如何找到绑定失败,并且抛出异常,如何防止修改属性名让xaml绑定失败。
林德熙
2018/09/19
2.4K0
WPF 如何在绑定失败异常
如何选择ESB
什么是ESB 企业服务总线(Enterprise Service Bus,ESB)的概念是从面向服务体系架构(Service Oriented Architecture, SOA)发展而来的。SOA描述了一种IT基础设施的应用集成模型;其中的软构件集是以一种定义清晰的层次化结构相互耦合。一个ESB是一个预先组装的 SOA实现,它包含了实现SOA分层目标所必需的基础功能部件。 在企业计算领域,企业服务总线是指由中间件基础设施产品技术实现的、 通过事件驱动和基于XML消息引擎,为更复杂的面向服务的架构提供的软件
Java学习123
2018/05/16
3.6K0
如何选择ESB
什么是ESB 企业服务总线(Enterprise Service Bus,ESB)的概念是从面向服务体系架构(Service Oriented Architecture, SOA)发展而来的。SOA描述了一种IT基础设施的应用集成模型;其中的软构件集是以一种定义清晰的层次化结构相互耦合。一个ESB是一个预先组装的SOA实现,它包含了实现SOA分层目标所必需的基础功能部件。 在企业计算领域,企业服务总线是指由中间件基础设施产品技术实现的、 通过事件驱动和基于XML消息引擎,为更复杂的面向服务的架构提供的软件架
cloudskyme
2018/03/20
3.7K0
如何选择ESB
检索com类工厂中的组件失败_检索com类工厂的组件失败
检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码。 (异常来自 HRESULT:0x8000401A)。
全栈程序员站长
2022/09/23
1.5K0
WPF 绑定的默认模式
小伙伴绑定了一个属性,但是发现属性在更新的时候没有同步到后台,他说在 WPF 绑定的默认值是什么?为什么没有设置 Mode 的属性,有的是双向有的是单向?本文就来告诉大家在 WPF 定义的依赖属性是如何控制绑定的是双向还是单向的方法
林德熙
2019/04/22
1.4K0
使用xmllint处理/验证xml
xmllint是一个很方便的处理及验证xml的工具,linux下只要安装libxml2就可以使用这个命令,下面整理一些常用功能
跑马溜溜的球
2020/12/07
1.7K0
XML封装与验证消息
Document document = DocumentHelper.createDocument(); document.setXMLEncoding(ChARSET_UTF_8); Element root = document.addElement("message"); Element head = root.addElement("head"); head.addElement("field").addAttribute("name"," ").setText(""); Element bo
用户3003813
2018/09/06
6440
WPF 绑定的默认模式
小伙伴绑定了一个属性,但是发现属性在更新的时候没有同步到后台,他说在 WPF 绑定的默认值是什么?为什么没有设置 Mode 的属性,有的是双向有的是单向?本文就来告诉大家在 WPF 定义的依赖属性是如何控制绑定的是双向还是单向的方法
林德熙
2022/08/04
8130
4100身份认证失败,用户身份验证失败
import httplib, urllib,datetime,base64,hmac,random,time,math
用户3692495
2018/10/24
8.7K1
4100身份认证失败,用户身份验证失败
VUE组件封装_vue组件内部双向绑定
官方:一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件。
全栈程序员站长
2022/11/09
8720
VUE组件封装_vue组件内部双向绑定
vs2015安装失败,必需的组件失败_博图显示下位组件错误
大家好,又见面了,我是你们的朋友全栈君。 VS2008安装失败,组件安装失败的解决办法 之前安装过VS2008,二次安装时,提示组件安装失败 ![在这里插入图片描述](https://img-blo
全栈程序员站长
2022/10/29
1.2K0
vs2015安装失败,必需的组件失败_博图显示下位组件错误

相似问题

Mule -如果XML模式验证失败,如何让Mule抛出异常

30

Java中的XML验证--为什么失败?

10

为什么我的XML验证对其模式失败?

22

Mule json to java组件

30

Java,XML用户验证失败

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档