我正在尝试使用比较器根据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元素的索引。上面的比较器对我不起作用请帮忙吗?
答案 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()