2013-10-25 41 views
1

如何基於整數數組中的最後一個整數對整數數組的ArrayList進行排序?對整數數組的ArrayList排序

ArrayList<int[]> paths = new ArrayList<int[]>(); 
paths.add(new int[]{0,0,0,0,4}); 
paths.add(new int[]{0,0,0,0,2}); 
paths.add(new int[]{0,0,0,0,1}); 
paths.add(new int[]{0,0,0,0,3}); 

所得的ArrayList將包含:[0,0,0,1] [0,0,0,2] [0,0,0,3] [0,0,0,4]

回答

5

執行Comparator並使用Collections.sort。或者兩者同時進行:

Collections.sort(paths, new Comparator<int[]>() { 
    public int compare(int[] a, int[] b) { 
     return (Integer)(a[a.length-1]).compareTo(b[b.length-1]); 
    } 
}); 
+0

我收到了這個問題: 無法在原始類型int –

+0

上調用compareTo(int)更新了答案。 – Zong

+0

嘗試'return a [a.length-1] -b [b.length-1];'或'返回Integer.valueOf(a [a.length-1])。compareTo(Integer.valueOf(b [b .length-1]));' –

2

這裏是一個比較不會做自動裝箱或鑄造一個版本:

public class Sorter { 

    public static void main(String[] args) { 
     ArrayList<int[]> paths = new ArrayList<int[]>(); 
     paths.add(new int[] { 0, 0, 0, 0, 4 }); 
     paths.add(new int[] { 0, 0, 0, 0, 2 }); 
     paths.add(new int[] { 0, 0, 0, 0, 1 }); 
     paths.add(new int[] { 0, 0, 0, 0, 3 }); 
     Collections.sort(paths, new Comparator<int[]>() { 
      private static final int INDEX = 4; 
      @Override 
      public int compare(int[] o1, int[] o2) { 
       return Integer.compare(o1[INDEX], o2[INDEX]); 
      } 
     }); 
     for (int[] is : paths) { 
      System.out.println(Arrays.toString(is)); 
     } 
    } 
} 

會導致:

[0, 0, 0, 0, 1] 
[0, 0, 0, 0, 2] 
[0, 0, 0, 0, 3] 
[0, 0, 0, 0, 4] 
0

首先在你的代碼應該是paths.add(...)path.add(...)

如果你不想實施Comparator你可以自己寫一個方法。如果效率並不重要,這可能是工作(冒泡排序 - 顯然它可以使用更好的排序算法更好):

public ArrayList<int[]> sort() { 
    ArrayList<int[]> sortedArray = this; 
    boolean switched = true; 
    while(switched) { 
     switched = false; 
     for(int i=0; i<sortedArray.size()-1; i++) 
      int[] a = sortedArray.get(i); 
      int[] b = sortedArray.get(i+1); 
      if(a[a.length]>b[b.length]) { 
       sortedArray.set(i, b); 
       sortedArray.set(i+1, a); 
       switched = true; 
      } 
    } 
    return sortedArray; 
} 

這又通過ArrayList和檢查,如果每對連續陣列的最後一個元素按正確順序排列。如果是這樣,它檢查下一對;如果沒有,它將兩個數組切換到ArrayList中。它繼續通過ArrayList,直到它不必再做開關;此時ArrayList被排序。

+0

'ArrayList sortedArray = this' - 你期望做什麼? – arshajii

+0

你是否建議我讓它成爲一個無效的方法? – asaini007