我有两个数组:
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);
我想要的输出:
这里arr2已经排序
答案 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);