Collections.sort是否在相同元素上保持顺序?

时间:2015-02-19 18:16:25

标签: java sorting collections comparator

我有一个按日期参数排序的对象列表,并希望按类别参数重新排序,但要将日期顺序保留在类别中。

是否足够这样,或者我是否必须实施一个比较器,该比较器考虑了同一类别对象的日期?

// sort the list by category asc(, date asc )
Collections.sort((List<Object>)entries, new Comparator<Object>() {

    @Override public int compare(Object elementA, Object elementB) {
        return elementA.category.compareTo(elementB.category); // what happens when elementA.category.equals(elementB.category)?
    }

});

1 个答案:

答案 0 :(得分:16)

您问题中的代码将执行您需要的操作,因为Collections.sort()确实保留了相等元素的顺序。

来自documentation

  

此类保证稳定:由于排序,相同的元素不会被重新排序。

换句话说,如果条目按sort()之前的日期排序,则sort()之后的日期将按照>的顺序排列

如果您不想依赖原始订单,您可以轻松扩展比较器,首先比较类别,然后使用日期打破关系。