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