Collection.sort(l)
の内容が であると仮定しl
ますComparable
。 Collection.sort(1, Comparator)
カスタムコンパレータを使用して の内容を比較しl
ます。これがあなたがしたことです。ソートの考え方 (sort()
メソッドを含む) は、オブジェクトが比較可能でなければならないことを意味しComparable
ますComparator
。
、 、などString
、多くの Java オブジェクトは既に比較可能であることに注意してください。それらのために、あなたはただ使うことができますDate
Number
Collection.sort(someList);
例
Circle
クラスがあるとしましょう
public class Circle {
double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getArea(){
return radius * radius * Math.PI;
}
}
100 個Circle
のオブジェクトを作成した場合:
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
Java はそれらを比較する方法がわからないため、それらを並べ替えることができません。これを 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;
}
}
Circle クラスのメソッドによりcompareTo()
、Java はそれらを比較し、並べ替えることができるようになりました。
今、あなたはこれを行うことができます:
Collections.sort(circleList);
// Yayyy I'm being sorted by the size of my areas!!!!!