2011-07-14 67 views
2

我正在使用java试图创建一个程序。Java:使用相关数组对ArrayList进行排序

我想要做的是排序arraylist,然后用相同的顺序排序一个单独的数组。我知道如何排序一个arrylist,但问题是我有一个单独的数组,其中每个元素与arraylist中的元素相关。

例如这里是一个可能的情况:

String[] array = {"U R F", "B' F2", "L' D"} 
arraylist<Double> = {"2.03", "4.32", "1.23"} 

(我知道一个ArrayList是不是像我这样做是为了简化初始化)我想结束了本:

String[] array = {"L' D", "U R F", "B' F2"} 
arraylist<Double> = {"1.23", "2.03", "4.32"} 

随着阵列和arraylist按arraylist数值排序。

回答

3

只要您的伴侣数组包含唯一值,您就可以构建一个SortedMap,其键 - 值对分别由ArrayList和Array组成。按顺序读出SortedMap的值到结果数组中。

下面是一个完整的例子:

import java.util.Arrays; 
import java.util.List; 
import java.util.Map; 
import java.util.SortedMap; 
import java.util.TreeMap; 

/** 
* Not great code; it just illustrates an idea. 
*/ 
public class SortExample { 

    /** 
    * Shows how to sort an array based on the way a "companion" list 
    * would sort. <strong>ASSUMPTION</strong>: The values in the companion 
    * list must be unique! 
    */ 
    public static void main(String[] args) { 

     String[] names = {"two", "seven", "six", "eight", "one"}; 
     List<Integer> numbers = Arrays.asList(2, 7, 6, 8, 1); 

     // Note: This only works if names and numbers are the same size.... 
     SortedMap<Integer, String> pairs = new TreeMap<Integer, String>(); 
     for (int i = 0; i < names.length; i++) { 
      pairs.put(numbers.get(i), names[i]); 
     } 

     // Note: This destroys the original array 
     int i = 0; 
     for (Map.Entry<Integer, String> e : pairs.entrySet()) { 
      names[i++] = e.getValue(); 
     } 

     System.out.println(Arrays.toString(names)); 
    } 
} 
+0

非常感谢你排序的地图工作。 –

+2

这只适用于'数字'保证是唯一的。如果不是这样,你就会失去数据。 – grahamparks

+0

@grahamparks +1一个正确和有价值的观察;谢谢。我编辑了答案。 –

4

我建议你用2个字段创建一个豆,一个字段的值来自于你String数组和另一个字段的值来自于你的ArrayList。将Bean对象添加到Collection对象中并进行排序。

+0

用于OOP解决方案 –

0

如果你知道如何排序是什么问题? 使用您选择的排序算法,当(比较后)交换arraylist的元素时,您只需交换数组的相应元素

0

如果您擅长数据保存类型,我建议您使用map.But它可能会有点复杂,所以做一个有数字的数组的副本。将其中的一个和另一个必须保持原来的。之后,在排序列表中找到每个数字的新位置并将该数字保存在一个int数组中。在最后一步,初始化一个新的数组列表并将每个元素添加到它们在数组中的新位置。希望它有帮助,祝你好运。