I have been trying to understand how sorting using Comparable works. I have class Activity implementing Comparable interface. I am trying to understand how activity.finish-this.finish; sorts in descending order and how this.finish-activity.finish sorts in ascending order. I am confused about what to use first for sorting in ascending and descending?
class Activity implements Comparable {
int start;
int finish;
public Activity(int start, int finish) {
this.start = start;
this.finish = finish;
}
@Override
public int compareTo(Object o) {
Activity activity = (Activity) o;
return activity.finish-this.finish;
}
}
public class ActivitySelectionProblem {
public static void main(String[] args) {
int start[] = {1, 3, 0, 5, 8, 5};
int finish[] = {2, 4, 10, 7, 9, 9};
List<Activity> list = new ArrayList<>();
for(int i = 0 ; i < start.length ; i++){
list.add(new Activity(start[i], finish[i]));
}
Collections.sort(list);
}
}
It's hacky. The contract for compareTo
is that it returns less than 0
when the result of comparison is less, greater than 0
when greater and 0
when equal. It is not obvious what the code does. Instead, I would use Integer.compare(int, int)
- something like
@Override
public int compareTo(Object o) {
return Integer.compare(this.finish, ((Activity) o).finish);
}