我有一个需要对字段进行排序的对象列表,比如Score。我不假思索地写了一个新的类,实现了比较器,它完成了这个任务,并且它工作了。
现在回过头来看,我想知道我是否应该让我的类实现可比较,而不是创建一个实现比较器的新类。分数是对对象进行排序的唯一字段。
发布于 2010-02-15 15:18:21
我会说,一个对象应该实现可比较,如果这是对类进行排序的明确自然的方法,并且任何需要对类进行排序的人通常都希望这样做。
但是,如果排序是类的一种不寻常的使用,或者排序只对特定用例有意义,那么比较程序是更好的选择。
换句话说,给定类名,是否清楚可比较对象将如何排序,或者您是否必须读取javadoc?如果是后者,那么未来的每个排序用例都需要一个比较器,在这一点上,实现可比较可能会减慢类的用户,而不是加快他们的速度。
发布于 2010-02-15 15:17:46
使用Comparable
如果您想定义相关对象的默认(自然)排序行为,通常的做法是使用技术或自然的(数据库?)此对象的对象的标识符。
如果要定义外部可控排序行为,请使用Comparator
,这可以覆盖默认的排序行为。
发布于 2010-02-15 15:21:33
使用Comparable
如果对象在您的控制范围内,则为
使用Comparator
:
Comparable
指定)行为不同的行为。https://stackoverflow.com/questions/2266827
复制