Java 对ArrayList的数组进行排序<;整数>;在爪哇

Java 对ArrayList的数组进行排序<;整数>;在爪哇,java,arrays,sorting,arraylist,compare,Java,Arrays,Sorting,Arraylist,Compare,我想按ArrayList元素的第一个int对ArrayList数组进行排序。 我试图重写Comparator类的compare方法,但它抛出: 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(Ti

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

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));
        }
    });
int max_代数=20;
静态ArrayList[]填充=新ArrayList[max_generations];
sort(填充,新比较器(){
@凌驾
公共整数比较(最终ArrayList entry1,最终ArrayList entry2){
返回entry1.get(0.compareTo(entry2.get(0));
}
});
有人能帮我吗?
谢谢。

您正在比较两个数组,但未检查比较对象是否存在

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){
            Integer value1 = entry1.get(0) == null : -1 ? entry1.get(0);
            Integer value2 = entry2.get(0) == null : -1 ? entry2.get(0);

            return value1.compareTo(value2);
        }
    });
int max_代数=20;
静态ArrayList[]填充=新ArrayList[max_generations];
sort(填充,新比较器(){
@凌驾
公共整数比较(最终ArrayList entry1,最终ArrayList entry2){
整数值1=entry1.get(0)==null:-1?entry1.get(0);
整数值2=entry2.get(0)==null:-1?entry2.get(0);
返回值1.比较(值2);
}
});

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

    @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));
    }
@覆盖
公共整数比较(最终ArrayList entry1,最终ArrayList entry2){
if(entry1==null&&entry2==null)
返回0;
if(entry1==null)
返回1;
if(entry2==null)
返回-1;
if(entry1.isEmpty()&&entry2.isEmpty())
返回0;
if(entry1.isEmpty())
返回1;
if(entry2.isEmpty())
返回-1;
返回entry1.get(0.compareTo(entry2.get(0));
}

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

请发布堆栈跟踪。是否初始化了数组中的所有ArrayList,并为每个ArrayList至少添加了一个元素?听起来像“entry1”和/或“entry2”是否在某个点为null您确定
填充
中的所有
数组列表
都已初始化?是的,我已在排序之前打印了数组,并且已正确初始化。mmh不喜欢两个null元素将根据第一个参数中的哪个元素按不同顺序排序的事实。如果两者都为null或空,则应返回0