【发布时间】:2021-11-18 07:12:32
【问题描述】:
我有一个名为 array 的对象数组,其中有 3 个项目,它们是:id、numAccess 和 numDelete (全部在原始 int 中)。
我想做的事:sort first by numAccess then by numDelete.
for(int i=1; i<=n; i++){
System.out.println("ID: " + array[i].id + " numAccess: " + array[i].numAccess + " numDelete: " + array[i].numDelete);
}
Arrays.sort(array, new Comparator<Process>(){
public int compare(Process p1, Process p2) {
Integer compr = Integer.valueOf(p1.numAccess).compareTo(Integer.valueOf(p2.numAccess));
if (compr != 0) {
return compr;
}
return Integer.valueOf(p1.numDelete).compareTo(Integer.valueOf(p2.numDelete));
}
});
for(int i=1; i<=n; i++){
System.out.println("ID: " + array[i].id + " numAccess: " + array[i].numAccess + " numDelete: " + array[i].numDelete);
}
假设before sort 是这样的:
ID: 1 numAccess: 0 numDelete: 8
ID: 2 numAccess: 4 numDelete: 15
ID: 3 numAccess: 7 numDelete: 9
ID: 4 numAccess: 13 numDelete: 5
ID: 5 numAccess: 9 numDelete: 13
ID: 6 numAccess: 0 numDelete: 6
那么desired after sort应该是:
ID: 6 numAccess: 0 numDelete: 6
ID: 1 numAccess: 0 numDelete: 8
ID: 2 numAccess: 4 numDelete: 15
ID: 3 numAccess: 7 numDelete: 9
ID: 5 numAccess: 9 numDelete: 13
ID: 4 numAccess: 13 numDelete: 5
但是,我得到的是:
ID: 0 numAccess: 0 numDelete: 0
ID: 0 numAccess: 0 numDelete: 0
ID: 0 numAccess: 0 numDelete: 0
ID: 6 numAccess: 0 numDelete: 6
ID: 1 numAccess: 0 numDelete: 8
ID: 2 numAccess: 4 numDelete: 15
我不知道出了什么问题。我可以得到一些建议吗?非常感谢。
【问题讨论】:
-
请显示minimal reproducible example。也就是说,我可以将一些代码复制并粘贴到我的 IDE 中,并能够运行它来重现您的输出。例如你应该展示你是如何创建数组的,以及创建对象的类。
-
数组从索引 0 开始,因此您不会打印第一个元素。 Sort 将对整个数组进行排序,但无论数组大小如何,您都只能打印到索引 n。
标签: java arrays comparator