java - 在 java 中对 ArrayList<Integer> 的数组进行排序

标签 java arrays sorting arraylist compare

我想按 ArrayLists 元素的第一个 int 对 ArrayList 的 Array 进行排序。 我试图重写 Comparator 类的比较方法,但它抛出:

Exception in thread "main" java.lang.NullPointerException
at BikeGA$1.compare(BikeGA.java:515)
at BikeGA$1.compare(BikeGA.java:1)
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:351)
at java.util.TimSort.sort(TimSort.java:230)
at java.util.Arrays.sort(Arrays.java:1438)
at BikeGA.main(BikeGA.java:512)

代码是:

int max_generations = 20;
static ArrayList<Integer>[] population = new ArrayList[max_generations];

Arrays.sort(population, new Comparator<ArrayList<Integer>>(){
        @Override
        public int compare(final ArrayList<Integer> entry1, final ArrayList<Integer> entry2){
            return entry1.get(0).compareTo(entry2.get(0));
        }
    });

有人可以帮助我吗? 谢谢。

最佳答案

您的比较器应该处理 null 或空的 ArrayList,以便它可以处理您放入数组中的任何数据:

    @Override
    public int compare(final ArrayList<Integer> entry1, final ArrayList<Integer> entry2){
        if (entry1 == null && entry2 == null)
            return 0;
        if (entry1 == null)
            return 1;
        if (entry2 == null)
            return -1;
        if (entry1.isEmpty() && entry2.isEmpty())
            return 0;
        if (entry1.isEmpty())
            return 1;
        if (entry2.isEmpty())
            return -1;
        return entry1.get(0).compareTo(entry2.get(0));
    }

这会将空元素放在数组的末尾,空列表放在它们之前。

关于java - 在 java 中对 ArrayList<Integer> 的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29890128/

相关文章:

c# - 大集合Server和Path的排序算法

Java:根据 HashMap 中的排序键显示值

java - 基于 UML 图的结果?

java - 播放声音的非常简单的 ListPreference 不起作用。有任何想法吗? (大量细节)

javascript - Vue.js - 如何按特定属性对数组内的对象进行排序并使用 "v-for"渲染它

c++ - C++初始化二维数组

c++ - 在 C++ 中使用 const ArrayType 或 ConstArrayType typedef 具有 const 元素的数组

java - 如何使用 Kubernetes 客户端列出存储类别

java - 为了更简洁的语言,Java 是否应该在未来的版本中打破向后兼容性?

java - 理解如何创建实体管理器或者我是否可以在 JAVA EE 中生成它们的问题