对数组进行排序并反映另一个数组中的更改

时间:2012-10-10 16:48:59

标签: java arrays sorting

我在Java中有一系列双打:arr1我想要排序。最有可能的第一种选择是实用方法Arrays.sort(double[])

我的想法是,我希望相同的更改(例如index i处的值与index j中的arr1处的值互换)以反映在另一个整数数组中:{{1 (在arr2)中,同一索引的值也发生了变化。

在Java中有没有一种简单的方法(技巧)来完成这个任务?或者唯一的方法是自己实现排序算法?

更新:我看到人们建议用一个包含2个值的对象替换这两个数组(一个来自arr2,另一个来自arr1)。这不会带来一些效率惩罚。换句话说,排序对象数组的效率是否低于基本类型数组(在这种情况下是双打的)?

数据完全是静态的。它很大(它适合内存)但是静态。

4 个答案:

答案 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)

请注意确定您在寻找什么,但另外一种解决办法可能就是这样。

创建地图以维护arr1arr2元素之间的关系

      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();
      }