当另一个数组按照Java

时间:2016-08-24 09:28:25

标签: java arrays sorting

我有两个数组:

  • 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 个答案:

答案 0 :(得分:0)

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

首先,拍一张地图。将 array2 值放入key array1 值到地图中的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

答案 1 :(得分:0)

我将做的是以下内容:

创建一个包含两个数字的类(一个来自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);