1

如何根据整数数组中的最后一个整数对整数数组的 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]

4

5 回答 5

7

实施 aComparator并使用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]);
    }
});
于 2013-10-25T18:28:03.810 回答
3

这是一个带有不进行自动装箱或强制转换的比较器的版本:

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]
于 2013-10-25T18:45:32.333 回答
1

使用 Java-8

paths.sort(Comparator.comparingInt(a -> a[a.length - 1]));
于 2019-11-19T15:33:43.120 回答
0

查看java.util.Collections.sort(List list, Comparator c) ... 您需要做的就是编写一个比较器来比较您的两个数组,剩下的就是小菜一碟。

于 2013-10-25T18:28:36.600 回答
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 已排序。

于 2013-10-25T18:53:08.030 回答