2013-10-25 39 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