Collections.sort 是否保持相等元素的顺序?
Does Collections.sort keep order on equal elements?
我有一个按日期参数排序的对象列表,我想按类别参数对它们重新排序,但将日期顺序保持在类别中。
这样就够了吗,还是我必须实现一个比较器来考虑同一类别对象的日期?
// 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)?
}
});
您问题中的代码将执行您需要的操作,因为 Collections.sort()
确实保留了相等元素的顺序。
This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort.
换句话说,如果条目按 sort()
之前的日期排序,它们将在 sort()
之后的每个类别 中保持按日期 排序.
如果您不想依赖原始顺序,您可以轻松地扩展您的比较器以首先比较类别,然后使用日期打破平局。
我有一个按日期参数排序的对象列表,我想按类别参数对它们重新排序,但将日期顺序保持在类别中。
这样就够了吗,还是我必须实现一个比较器来考虑同一类别对象的日期?
// 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)?
}
});
您问题中的代码将执行您需要的操作,因为 Collections.sort()
确实保留了相等元素的顺序。
This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort.
换句话说,如果条目按 sort()
之前的日期排序,它们将在 sort()
之后的每个类别 中保持按日期 排序.
如果您不想依赖原始顺序,您可以轻松地扩展您的比较器以首先比较类别,然后使用日期打破平局。