Java 对象比较: Comparable接口 与 Comparator接口的区别

Comparable接口

  1. 源码如下所示,位于java.util 包

package java.lang;

public interface Comparable<T> {
    public int compareTo(T o);
}

  1. 用法:实体类实现Comparable,并实现compareTo()方法

public class User implements Comparable<User> {
    
    private String name;
    
    private Integer age;

    @Override
    public int compareTo(User o) {
        if(this.age > o.age){
            return 1; // 大于
        }else if(this.age == o.age){
            return 0; // 等于
        }else{
            return -1; // 小于
        }
    }
}

  1. 用处:实现集合或数组的比较及排序

        List<User> userList = new ArrayList<>();
        userList.add(new User("张三",30));
        userList.add(new User("王五",50));
        userList.add(new User("李四",40));
        Collections.sort(userList);
// 输出结果(从小到大的顺序)  张三  李四 王五

Comparator接口

  1. 源码如下所示,位于java.util 包

package java.lang;

public interface Comparable<T> {
    public int compare(T o1, T o2);
...
}

  1. 用法:实体类实现Comparable,并实现compareTo()方法

public class UserCompa implements Comparable<User> {
    
    private String name;
    
    private Integer age;

    @Override
    public int compareTo(User o) {
        if(this.age > o.age){
            return 1; // 大于
        }else if(this.age == o.age){
            return 0; // 等于
        }else{
            return -1; // 小于
        }
    }
}

  1. 用处:实现集合或数组的比较及排序

        List<User> userList = new ArrayList<>();
        userList.add(new User("张三",30));
        userList.add(new User("王五",50));
        userList.add(new User("李四",40));
        Collections.sort(userList, new UserAgeComparator()); // UserAgeComparator这里也可以使用lambda函数
// 输出结果(从小到大的顺序)  张三  李四 王五

4.特点:不用实体类实现,而使用另外的类或者lambda函数;可以随时自定义比较规则

最后对比

Java 对象比较: Comparable接口 与 Comparator接口的区别

© 版权声明

相关文章

暂无评论

none
暂无评论...