我在Java中有一系列双打:arr1
我想要排序。最有可能的第一种选择是实用方法Arrays.sort(double[])
。
我的想法是,我希望相同的更改(例如index i
处的值与index j
中的arr1
处的值互换)以反映在另一个整数数组中:{{1 (在arr2
)中,同一索引的值也发生了变化。
在Java中有没有一种简单的方法(技巧)来完成这个任务?或者唯一的方法是自己实现排序算法?
更新:我看到人们建议用一个包含2个值的对象替换这两个数组(一个来自arr2
,另一个来自arr1
)。这不会带来一些效率惩罚。换句话说,排序对象数组的效率是否低于基本类型数组(在这种情况下是双打的)?
数据完全是静态的。它很大(它适合内存)但是静态。
答案 0 :(得分:7)
更简洁的解决方案是创建一个封装两个数据值的类,而不是试图维护已排序的并行数组,而只需要一个对象数组。
(但是为了回答你的问题,在Java中没有内置的方法来实现这一点。实现你自己的排序例程,保持两个数组根据其中一个数据的值进行排序,这对于少量的数据是有用的不太可能改变,但很难维持。)
答案 1 :(得分:1)
一种解决方案不影响排序性能,即仍然是O(nlog(n))时间复杂度。
array[i] -> i
编辑:Raihan评论让我看起来很悲惨:(
答案 2 :(得分:1)
以这种方式试试....
- 使用array
ArrayList
转换为Arrays.asList()
- 创建另一个列表对象引用变量并为其分配相同的ArrayList对象,现在对第一个ArrayList的任何更改都将反映到第二个ArrayList。
<强>例如强>
double[] array = new double[10];
ArrayList<Double> arList_1 = new ArrayList<Double>(Arrays.asList(array));
ArrayList<Double> arList_2 = arList2;
现在进行排序,有两个选项:
- 使用java.lang.Comparable
界面,如果您想以单向排序 。
- 使用java.util.Comparator
界面,如果您想以多种方式对其进行排序。
答案 3 :(得分:0)
请注意确定您在寻找什么,但另外一种解决办法可能就是这样。
创建地图以维护arr1
和arr2
元素之间的关系
Map<Double, Double> myLocalMap<Double, Double>();
for(int ind=0; indx < arr1.length; indx++){
myLocalMap.put(Double.valueOf(arr1[indx]), Double.valueOf(arr2[indx]));
}
现在按照你说的那样排序arr1
:
Arrays.sort(arr1);
对arr1
进行排序后,请按以下步骤更新arr2
:
for(int ind=0; indx < arr1.length; indx++){
arr2[indx] = myLocalMap.get(arr1[indx]).doubleValue();
}