I have an array of objects called array and have 3 items in it, which are: id, numAccess and numDelete (all in primitive int).
What I want to do: 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);
}
Let's say if before sort
is this:
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
Then desired after sort
should be:
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
However, what I get is this:
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
I couldn't figure out what's wrong. May I get some advice? Thank you very much.
If you want to only sort part of the array (from index 1 to n inclusive) you can use Arrays.sort(array, 1, n+1, comparator);
Also note that your comparator implementation is unnecessarily complex. You can replace
Integer compr = Integer.valueOf(p1.numAccess).compareTo(Integer.valueOf(p2.numAccess));
with
int compr = Integer.compare(p1.numAccess, p2.numAccess));