我想根据另一个数组(indexes)的排序顺序(此案例为10,34,32,21),来遍历两个数组(A和B)。
受这个主题的启发,我创建了一个ArrayList(更喜欢AList而不是数组),其值为(1,2,3... indexes.length),然后使用与索引相关的比较器将其排序。上述代码按预期工作。 但是,如果我将最后一行中的indexes[s]更改为indexes[indexOrder.indexOf(s)]。排序将产生错误结果。如果ArrayList的索引与其值相同,为什么indexOf(s)会给出不同的结果?
String[] A: a, b, c, d
String[] B: e, f, g, h
int[] indexes: 10, 34, 32, 21
很抱歉这里的示例不好。我已经更新了索引数组以消除混淆。
期望输入和输出
输入是三个数组。我想通过索引数组的排序来迭代A、B。也就是说,我想找到一种迭代方式,使用顺序(a, d, c, b)迭代A,使用顺序(e, h, g, f)迭代B。
我的方法:
我用了一种解决问题的方法,我相信它与另一种方法是完全相同的。然而,第二种方法不起作用。如果有人能解释为什么它不起作用,我会很感激,因为我认为这会让我更好地理解java中Collections.sort的工作原理。
List<Integer> indexOrder = new ArrayList<>(indexes.length);
for (int i = 0; i < indexes.length; i++) {
indexOrder.add(i);
}
Collections.sort(indexOrder, Comparator.comparing((Integer s) -> indexes[s]));
受这个主题的启发,我创建了一个ArrayList(更喜欢AList而不是数组),其值为(1,2,3... indexes.length),然后使用与索引相关的比较器将其排序。上述代码按预期工作。 但是,如果我将最后一行中的indexes[s]更改为indexes[indexOrder.indexOf(s)]。排序将产生错误结果。如果ArrayList的索引与其值相同,为什么indexOf(s)会给出不同的结果?
Collections.sort(indexOrder, Comparator.comparing((Integer s) -> indexes[indexOrder.indexOf(s)]));
for (int idx : indexes) { ... A[idx] ... B[idx] ...}
呢? - HenryindexOrder
中是否有重复项或者是稀疏的? - ernest_k