Collection.sort(l) assumes that the contents of l are Comparable. Collection.sort(1, Comparator) uses a custom comparator to compare the contents of l, this is what you did. The very idea of sorting (including the sort() method) implies the objects MUST be comparable - in this case, with either Comparable or Comparator.
Note that many Java objects are comparable already, including String, Date and Number. For those, you can just use Collection.sort(someList);
Example
Say you have a Circle class
public class Circle {
double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getArea(){
return radius * radius * Math.PI;
}
}
If you created 100 Circle objects:
ArrayList<Circle> circleList = new ArrayList<>();
for (int i = 0; i < 100; i++) {
// adds a circle with random radius
circleList.add(new Circle((int)(Math.random() * 100)));
}
// try to sort the list
Collections.sort(circleList); //compilation error: must be Comparable
You can't sort them because Java has no idea how to compare them. You have to tell this to Java:
public class Circle implements Comparable<Circle> {
double radius;
public Circle(double radius) {
this.radius = radius;
}
// you MUST override the compareTo method from the Comparable interface
@Override
public int compareTo(Circle cirlce){
if (this.getArea() > circle.getArea())
return 1;
else if (this.getArea() == circle.getArea())
return 0;
else
return -1;
}
public double getArea(){
return radius * radius * Math.PI;
}
}
With the compareTo() method in the Circle class, Java now knows how to compare them and can sort them.
Now you can do this:
Collections.sort(circleList);
// Yayyy I'm being sorted by the size of my areas!!!!!