Java Comparable 与 Comparator 的比较


Comparable 与 Comparator 的比较

  • 都是一种集合框架下的比较工具;

1. Comparable

  • Comparable 是一种排序接口,只要实现 Comparable 接口的对象就可以直接成为一个可以比较的对象,但是需要修改源代码,即必须重写 compareTo() 方法,在里面设计需要比较的属性;
  • Comparable 虽然简单但一般很少用,因为被 Comparator 替代了;
  • compareTo() 方法如下:
public interface Comparable<T> {
    public int compareTo(T o);
}
  • 应用如下:
import java.util.ArrayList;
import java.util.Collections;

class User implements Comparable<User> {
    private Integer id;

    public User(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                '}';
    }

    @Override
    public int compareTo(User o) {
        if (this.id > o.getId()) {
            return 1;
        } else if (this.id < o.getId()) {
            return -1;
        } else {
            return 0;
        }
    }
}

public class Test {
    public static void main(String[] args) {
        ArrayList<User> al = new ArrayList();
        al.add(new User(3));
        al.add(new User(5));
        al.add(new User(4));
        System.out.println(al);
        Collections.sort(al);
        System.out.println(al);
    }
}
/*
输出
[User{id=3}, User{id=5}, User{id=4}]
[User{id=3}, User{id=4}, User{id=5}]
 */


2. Comparator

  • Comparator 是一种比较器,没有实现 Comparable 接口的对象也能使用它,不需要修改源代码;
  • 比较某个对象时,比较器和对象被一起传递过去, 并且在 Comparator 里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象;
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getAge() - o2.getAge();//o1 o2 升序排序
            }
        });
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值