作用
对于引用类型,Java 无法区分谁大谁小。所以为了解决如何比较两个对象大小的问题,JDK 提供了两个接口 java.lang.Comparable 和 java.util.Comparator。
对于 Tree 来说
实体类实现 Comparable 接口,对 Tree 而言,在添加元素时就已经自动排序了。实体类没有实现 Comparable 接口时,Tree 可在创建容器时将 Comparator 接口作为构造参数传入。
对于 List 来说
List 不会自动排序还需要调用 Collections.sort(list)
或 list,sort()
。如果实体类实现了 Comparable 接口时,可以通过调用 Collections.sort(list)
对元素进行排序。如果实体类没有实现 Comparable 接口时,List 则需要在调用 sort 方法时将 Comparator 作为参数传入。
例子
实体类没有实现 Comparable 接口时,可以将 Comparator 接口作为参数传入容器/方法中,从而对实体类进行排序
创建 List<User>
集合,想对集合中的对象按照年龄升序排序输出
class Solution {
public static void main(String[] args) {
List<User> list =new ArrayList<>();
list.add(new User("zyx",18));
list.add(new User("wmj",19));
list.add(new User("xm",15));
list.add(new User("ak",20));
}
}
class User {
String name;
int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
Comparable 接口
class Solution {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("zyx", 18));
list.add(new User("wmj", 19));
list.add(new User("xm", 15));
list.add(new User("ak", 20));
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
}
class User implements Comparable<User> {
String name;
int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(User o) {
return this.age - o.age;
}
}
Comparator 接口
class Solution {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("zyx", 18));
list.add(new User("wmj", 19));
list.add(new User("xm", 15));
list.add(new User("ak", 20));
System.out.println(list);
list.sort(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return o1.age - o2.age;
}
});
System.out.println(list);
}
}
class User {
String name;
int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
标题:Comparable 和 Comparator 的用法
作者:Yi-Xing
地址:http://47.94.239.232:10014/articles/2021/01/13/1610522289448.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!