java - JavaFX SortedList是否稳定?

时间:2015-06-12 16:05:50

标签: sorting javafx

让我们说我想对列表进行两次排序,每次使用不同的比较器,第一个比较器优先于第二个比较器。可以简单地调用SortedList构造函数两次,每个比较器调用一次吗?

为了澄清我为什么要这样做,我们假设我有一个Student个对象的无序列表,其中包含AgeName字段。现在,我想要实现的最终结果是Student列表,其中较年轻的学生将出现在列表的前面。但是,如果有一组年龄相同的学生,我希望它们按排序名称顺序出现。问题在于我只能使用给我的比较器 - 在这种情况下,根据指定的比较器,比较学生的年龄或名称。

对列表进行两次排序,首先按名称排序,然后按年龄a基数排序,解决问题,但前提是所涉及的排序算法是稳定的。我知道Collections.sort是稳定的,但我不确定SortedList是否会发挥相同的行为。

我喜欢J Atkin的thenComparing答案,我认为这就是我要做的,但现在我只是好奇SortedList是否稳定。

1 个答案:

答案 0 :(得分:3)

是的,它很稳定。我刚检查了SortedList的实现,发现了一个名为SortHelper的类,它对SortedList执行排序。其中有一个名为sort的方法:

public <T> int[] sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c) {
....
    if (c==null)
        mergeSort(aux, a, fromIndex, toIndex, -fromIndex);

因此SortedList使用merge sort,这是稳定的。

所有这一切都很好,但是,更简洁的方法是使用thenComparing组合比较器:

sortAge.thenComparing(sortName))