java – Collections.sort()使用比较器?

import java.util.*;

public class C_2 {
    public static void main(String args[]) {
        String theStrings[] = { "x", "a", "b", "c", "d" };
        List l = Arrays.asList(theStrings);
        Collections.sort(l);                            // line a
        Collections.sort(l, new ThisIsMyThing());       // line b
        System.out.println(l);
    }
}

class ThisIsMyThing implements Comparator {
    public int compare(Object o1, Object o2) {
        String s1 = (String)o1;
        String s2 = (String)o2;

        return -1 * s1.compareTo(s2);
    }
}

我知道C_2类基于两种不同的技术进行排序.
一个是标准的Collections.sort(l);
另一个是Collections.sort(l,Comparator<>());我无法理解这种排序方法.有人可以向我解释一下吗?

最佳答案
Collection.sort(l)假定l的内容是Comparable. Collection.sort(1,Comparator)使用自定义比较器来比较l的内容,这就是你所做的.排序的想法(包括sort()方法)意味着对象必须是可比较的 – 在这种情况下,与Comparable或Comparator相比.

请注意,许多Java对象已经具有可比性,包括字符串,日期和数字.对于那些,你可以只使用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!!!!!

转载注明原文:java – Collections.sort()使用比较器? - 代码日志