为了账号安全,请及时绑定邮箱和手机立即绑定

何时使用Comparable和Comparator

何时使用Comparable和Comparator

慕后森 2019-07-29 16:35:47
何时使用Comparable和Comparator我有一个对象列表,我需要在一个字段上排序,比如分数。在没有多想的情况下,我编写了一个实现Comparator的新类,它可以执行任务并且可以正常运行。现在回过头来看,我想知道我是否应该让我的类实现Comparable,而不是创建一个实现Comparator的新类。分数是对象将被订购的唯一字段。我做过什么可以接受的做法?是正确的方法“首先让类实现Comparable(对于自然顺序),如果需要替代字段比较,那么创建一个实现Comparator的新类”?如果上面的(2)为真,那么它是否意味着只有在具有类实现Comparable之后才应该实现Comparator?(假设我拥有原始课程)。
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

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

但是,如果排序是类的异常使用,或者排序仅对特定用例有意义,那么比较器是更好的选择。

换句话说,给定类名,是否可以比较排序,或者你是否必须求助于阅读javadoc?如果是后者,可能性是每个未来的排序用例都需要一个比较器,此时可比较的实现可能会减慢类的用户,而不是加速它们。


查看完整回答
反对 回复 2019-07-29
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

使用Comparable,如果要定义一个默认的(天然)排序问题的对象的行为,常见的做法是使用的技术或自然(数据库?)的对象标识符这一点。

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


查看完整回答
反对 回复 2019-07-29
?
Helenr

TA贡献1780条经验 获得超4个赞

用途Comparable

  • 如果对象在你的控制之下。

  • 如果比较行为是主要的比较行为。

用途Comparator

  • 如果对象超出您的控制范围,您无法实现它们Comparable

  • 当您想要比较不同于默认(由指定的Comparable)行为的行为时。


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 668 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信