文章目录
- 区别
- Comparable示例
- Comparator示例
- 参考资料
都可以用于排序。都是接口。
区别
Comparable示例
让被排序的类实现 Comparable 接口,重写 compareTo() 方法。
import java.util.*;
public class Main {
public static void main(String[] args){
TreeSet<Person> ts = new TreeSet<>();
ts.add(new Person("小b", 4));
ts.add(new Person("小a", 4));
ts.add(new Person("小b", 3));
ts.forEach(System.out::println);
}
}
class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person o) {
if (age != o.age) return age - o.age;
return name.compareTo(o.name);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
Comparator示例
写在 sort() 方法中,可以使用 lambda 表达式替代。
import java.util.*;
public class Main {
public static void main(String[] args){
List<Integer> arrayList = new ArrayList<Integer>(){{
add(5);
add(8);
add(2);
add(6);
add(3);
}};
Collections.sort(arrayList, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
System.out.println(arrayList);
}
}
参考资料
comparable-和-comparator-的区别