根据其他列表值的索引对列表进行排序

时间:2016-09-14 10:57:38

标签: java sorting comparator

我正在尝试使用比较器根据List 1对List 2进行排序。

所以这两个清单是:

ListA = [2,3,4]
ListB = [8,2,4]

我需要根据列表1对列表2进行排序。

预期产出:

List1: [2,3,4]
List2: [2,8,4]

以下是我正在尝试的代码

Collections.sort(list1);
Collections.sort(list2,new Comparator<Integer>(){
    public int compare(Integer left,Integer right){
        return Integer.compare(list1.indexOf(left),list1.indexOf(right));
    }
})

这里的排序将基于List1元素的索引。上面的比较器对我不起作用请帮忙吗?

2 个答案:

答案 0 :(得分:0)

从你的例子中我并不完全清楚你正在尝试做什么,所以这个答案实际上可能无法解决你的问题。如果你要做的是将ListA的排序顺序应用于ListA和ListB,那么你可以按如下方式进行。

创建一个辅助类,允许您根据同一索引配对两个列表:

IntPair

然后从原始列表中创建int size = list1.size(); List<IntPair> aux = new ArrayList(size); for (int i = 0; i < size; i++) { aux.add(new IntPair(list1.get(i), list2.get(i))) } Collections.sort(aux); 个实例的新列表并对其进行排序。

for (int i = 0; i < size; i++) {
    IntPair ip = aux.get(i);
    list1.set(i, ip.i1);
    list2.set(i, ip.i2);
}

最后,将结果对列表的值复制回原始列表。

O(nlogn)

请注意,就算法复杂性而言,此方法仍为.

答案 1 :(得分:0)

这可能有点重量级,但它可以完成工作并且它是通用的。

基本上,你可以压缩两个列表,根据索引对它们进行排序/比较,解压缩它们,然后返回结果。

这不会就地修改列表。我试图让变量有意义,但谨慎的名字。请你澄清一下。

$.ajax()