使用比较器无法根据另一个数组对一个数组进行排序

萨奇·乔拉西亚

我想根据java中的另一个数组对一个数组进行排序。我可以使用 Pair 数据结构,但直接在比较器中使用另一个数组不起作用。

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
                  final int[] l = new int[]{9, 17, 39, 35, 20, 18, 34, 11, 2, 45, 46, 15, 33, 47, 10, 27};
     final List<Integer> n = Arrays.asList(32, 39, 86, 81, 64, 53, 76, 40, 46, 63, 88, 56, 52, 50, 22, 38);
    Collections.sort(n,  new Comparator<Integer>() {
    public int compare(Integer left, Integer right) {
        //System.out.println(n.indexOf(left) + " "+n.indexOf(right));
        return l[n.indexOf(left)]-l[n.indexOf(right)];
    }
});
    //Collections.sort(l);
    System.out.println(n);
    System.out.println(l);
    }
}

获取输出 - [50, 88, 63, 81, 38, 86, 39, 32, 76, 56, 64, 53, 40, 52, 46, 22] 预期输出 - [46,32 等] 对应于 [ 2,9 等]

中间人

您的问题是当您对列表进行排序时,参考顺序会发生变化。你开始9->3217->39前两个元素。在比较和更改前两个元素后,“映射”可能会发生变化,您将拥有9->3917->32代替下一次迭代。

要解决这个问题,您需要创建列表的副本。然后,在排序时,n您可以参考该订单的副本。这样的事情应该工作:

public static void main (String[] args) throws java.lang.Exception
{
  final int[] l = new int[]{9, 17, 39, 35, 20, 18, 34, 11, 2, 45, 46, 15, 33, 47, 10, 27};
  final List<Integer> n = Arrays.asList(32, 39, 86, 81, 64, 53, 76, 40, 46, 63, 88, 56, 52, 50, 22, 38);
  List<Integer> listCopy = new ArrayList(n);
  Collections.sort(n,  new Comparator<Integer>() {
    public int compare(Integer left, Integer right) {
        return l[listCopy.indexOf(left)]-l[listCopy.indexOf(right)]; \\notice the listCopy.indexOf()
    }
  });
  System.out.println(n);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据另一个数组的值对一个数组进行排序?

来自分类Dev

根据另一个数组的顺序对一个数组进行排序

来自分类Dev

使用JavaScript根据另一个数组对一个数组进行排序

来自分类Dev

根据另一个数组的排序顺序对多个数组进行排序

来自分类Dev

根据另一个数组的排序顺序对多个数组进行排序

来自分类Dev

如何根据另一个数组的排序顺序对多个数组进行排序

来自分类Dev

如何根据另一个数组的排序方式对一个数组进行排序?(JavaScript)

来自分类Dev

根据另一个数组对一个列表进行排序

来自分类Dev

对一个数组进行排序比较 PHP 中的另一个数组

来自分类Dev

将一个数组与另一个数组值进行比较

来自分类Dev

根据另一个数组中的数据对一个数组进行排序

来自分类Dev

如何根据Java中另一个数组的值对一个数组进行排序?

来自分类Dev

根据另一个数组的顺序对数组数组进行排序(Ruby)

来自分类Dev

根据数组键顺序对另一个数组内的数组进行排序

来自分类Dev

根据另一个数组中的顺序对数组数组进行排序

来自分类Dev

根据另一个数组的排序顺序对数组进行排序

来自分类Dev

根据另一个数组中定义的排序顺序对数组进行排序

来自分类Dev

根据另一个数组按顺序对数组进行排序

来自分类Dev

根据另一个数组对对象数组进行排序

来自分类Dev

PHP:根据另一个数组对数组进行排序

来自分类Dev

根据另一个数组对数组进行排序,迅速

来自分类Dev

根据PHP上的另一个数组对数组的元素进行排序

来自分类Dev

根据javascript中的另一个数组对数组进行排序

来自分类Dev

如何根据另一个数组的位置对数组进行排序?

来自分类Dev

根据另一个数组的顺序对数组进行有效排序

来自分类Dev

在绘制之前根据另一个数组对数组进行排序

来自分类Dev

如何根据另一个数组的值对数组的值进行排序

来自分类Dev

Java:使用方法和比较器将一个数组排序为另一个数组

来自分类Dev

Javascript使用下划线根据另一个数组顺序对数组顺序进行排序

Related 相关文章

  1. 1

    根据另一个数组的值对一个数组进行排序?

  2. 2

    根据另一个数组的顺序对一个数组进行排序

  3. 3

    使用JavaScript根据另一个数组对一个数组进行排序

  4. 4

    根据另一个数组的排序顺序对多个数组进行排序

  5. 5

    根据另一个数组的排序顺序对多个数组进行排序

  6. 6

    如何根据另一个数组的排序顺序对多个数组进行排序

  7. 7

    如何根据另一个数组的排序方式对一个数组进行排序?(JavaScript)

  8. 8

    根据另一个数组对一个列表进行排序

  9. 9

    对一个数组进行排序比较 PHP 中的另一个数组

  10. 10

    将一个数组与另一个数组值进行比较

  11. 11

    根据另一个数组中的数据对一个数组进行排序

  12. 12

    如何根据Java中另一个数组的值对一个数组进行排序?

  13. 13

    根据另一个数组的顺序对数组数组进行排序(Ruby)

  14. 14

    根据数组键顺序对另一个数组内的数组进行排序

  15. 15

    根据另一个数组中的顺序对数组数组进行排序

  16. 16

    根据另一个数组的排序顺序对数组进行排序

  17. 17

    根据另一个数组中定义的排序顺序对数组进行排序

  18. 18

    根据另一个数组按顺序对数组进行排序

  19. 19

    根据另一个数组对对象数组进行排序

  20. 20

    PHP:根据另一个数组对数组进行排序

  21. 21

    根据另一个数组对数组进行排序,迅速

  22. 22

    根据PHP上的另一个数组对数组的元素进行排序

  23. 23

    根据javascript中的另一个数组对数组进行排序

  24. 24

    如何根据另一个数组的位置对数组进行排序?

  25. 25

    根据另一个数组的顺序对数组进行有效排序

  26. 26

    在绘制之前根据另一个数组对数组进行排序

  27. 27

    如何根据另一个数组的值对数组的值进行排序

  28. 28

    Java:使用方法和比较器将一个数组排序为另一个数组

  29. 29

    Javascript使用下划线根据另一个数组顺序对数组顺序进行排序

热门标签

归档