何时使用Comparable和Comparator
我有一个需要在字段上排序的对象列表,比如Score。 没有太多的想法,我写了一个实现比较器的新类,它完成任务并且工作。
现在回顾一下,我想知道是否应该让我的类实现Comparable,而不是创建一个实现Comparator的新类。 分数是对象将被排序的唯一字段。
我做了什么可以接受的做法?
是正确的方法“首先将类实现为Comparable(用于自然顺序),如果需要替代字段比较,则创建一个实现Comparator”的新类?
如果上面的(2)是真的,那么是否意味着只有在类实现Comparable后才能实现Comparator? (假设我拥有原始类)。
我想说如果一个对象应该实现Comparable(如果这是对类进行排序的明显的自然方法),并且任何需要对类进行排序的人通常都希望这样做。
但是,如果排序是该类的不寻常使用,或者排序只对特定用例有意义,那么比较器是更好的选择。
换句话说,鉴于类名,是否清楚类似的东西会如何分类,还是你不得不诉诸阅读javadoc? 如果是后者,那么很可能每个分类用例都需要一个比较器,在这一点上,可比较的实现可能会降低该类用户的速度,而不会加快他们的速度。
如果要定义有问题的对象的默认 (自然)排序行为,则使用Comparable
,通常的做法是使用该对象的技术或自然(数据库?)标识符。
如果要定义外部可控排序行为,请使用Comparator
,这可以覆盖默认排序行为。
使用Comparable
:
使用Comparator
:
Comparable
。 Comparable
指定)行为不同的行为时。