2011-07-14 68 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數組中。在最後一步,初始化一個新的數組列表並將每個元素添加到它們在數組中的新位置。希望它有幫助,祝你好運。