gpt4 book ai didi

java - 根据另一个列表值的索引对列表进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 12:15:10 25 4
gpt4 key购买 nike

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

最佳答案

从你的例子中我并不清楚你想要做什么,所以这个答案可能并不能真正解决你的问题。如果您想要做的是将 ListA 的排序顺序应用于 ListA 和 ListB,那么您可以按如下方式执行。

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

private class IntPair implements Comparable<IntPair> {
int i1;
int i2;

public IntPair(int i1, int i2) {
this.i1 = i1;
this.i2 = i2;
}

public int compareTo(IntPair other) {
return Integer.compare(i1, other.i1);
}
}

然后从原始列表中创建一个新的 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)

关于java - 根据另一个列表值的索引对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39488721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com