我想按ArrayLists元素的第一个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));
}
});
有人能帮我吗?谢谢。
您的Comparator应该处理null或empty 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));
}
这会将空元素放在数组的末尾,并将空列表放在它们的前面。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句