首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用比较和比较器

何时使用比较和比较器
EN

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

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

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

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

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

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

回答 19

Stack Overflow用户

回答已采纳

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

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

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

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

票数 83
EN

Stack Overflow用户

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

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

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

票数 133
EN

Stack Overflow用户

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

使用Comparable

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

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

使用Comparator

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

https://stackoverflow.com/questions/2266827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档