有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中,当另一个数组按升序排序时,更改一个数组的值

我有两个阵列:

  • int[] arr1
  • int[] arr2

上面两个都有一个大小为n的用户输入

我需要使用java按升序排列arr2。如何更改对应于arr2值的arr1值

示例(更多信息):

int[] arr1={1,2,3,4,5};
int[] arr2={3,6,5,1,9};
Arrays.sort(arr2);

我希望输出的方式:

  • arr1={4,1,3,2,5}
  • arr2={1,3,5,6,9}

这里arr2已经被排序了


共 (2) 个答案

  1. # 1 楼答案

    我要做的是:

    创建一个包含两个数字的类(一个来自arr1,另一个来自arr2)。使其实现可比性并比较第二个数字。

    public class Pair implements Comparable<Pair> {
    
        private Integer e1;
        private Integer e2;
    
        @Override
        public int compareTo(Pair o) {
            return getE1().compareTo(o.getE1());
        }
    }
    

    在该方法中,创建一个Pair列表并用这两个数组的元素填充,然后使用Collections中的方法对其进行简单排序

    int[] arr1={1,2,3,4,5};
    int[] arr2={3,6,5,1,9};
    ArrayList<Pair> list = new ArrayList<Pair>();
    for(int i = 0; i < arr1.length; i++) {
        list.add(new Pair(arr1[i], arr2[i]);
    }
    Collections.sort(list);
    
  2. # 2 楼答案

    如果第二个数组中没有重复的数字(如提供的示例),则可以使用Map

    首先,拿一张地图。将数组2值放入映射中的key数组1值放入映射中的value。然后根据这些值对地图进行排序。现在如果你从地图上拿到钥匙,你就会得到你想要的

    使用TreeMap。它不需要排序。它以这样的方式输入数据,以确保映射将以升序键顺序进行

    Map<Integer, Integer> m = new TreeMap<>();
    
    int[] arr1 = {1, 2, 3, 4, 5};
    int[] arr2 = {3, 6, 5, 1, 9};
    
    // Put array2 values as key parameter and array1 values as value parameter
    for (int i = 0; i < arr1.length; i++) {
        m.put(arr2[i], arr1[i]);
    }
    
    int i = 0;
    
    // Print the sorted map
    for (Map.Entry<Integer, Integer> entry : m.entrySet()) {
        System.out.println("arr1["+ i +"] = " + entry.getValue());
        i++;
    }
    

    输出:

    arr1[0] = 4
    arr1[1] = 1
    arr1[2] = 3
    arr1[3] = 2
    arr1[4] = 5