对整数数组的ArrayList进行排序

时间:2013-10-25 18:24:20

标签: java sorting 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 个答案:

答案 0 :(得分: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]);
    }
});

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

答案 2 :(得分:0)

查看java.util.Collections.sort(List list, Comparator c) ...你需要做的只是写一个Comparator来比较你的两个阵列,剩下的就是小菜一碟。

答案 3 :(得分: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已排序。

答案 4 :(得分:0)

使用Java-8

paths.sort(Comparator.comparingInt(a -> a[a.length - 1]));