java比较:Comparable和Comparator

前言

java中如果2个对象需要进行比较(对于某个成员对象的比较),可以有2种方式,实现接口Comparable和Comparator。它们之间还有区别。

Comparable接口

源码如下:

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

这个接口主要是实现自身对象与其他对象的比较。只需要实现这个接口,就可以直接采取CompareTo进行对象的比较,内部实现具体字段的比较即可。
String就实现了此接口,源码如下:

  public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }

Comparator接口

源码如下:

public interface Comparator<T> {

    int compare(T o1, T o2);

    boolean equals(Object obj);
}

这个比较可以实现2个对象之间的比较,想对于Comparable来说,就很独立了。所比较的类无需实现接口,由其他类实现接口,调用方法,将比较对象传递进去进行比较即可。同时还能灵活控制比较类型。如下:

public class Compare implements Comparator<User> {

    private String type;

    public Compare(String type){
        this.type = type;
    }

    public int compare(User user1, User user2) {
        if (type.equals("id")){
            //TODO
        }else if (type.equals("name")){
            //TODO
        }
        return 0;
    }
}

根据传递的不同参数,决定不同对象之间比较哪些属性即可。

场景

1.自定义详细的排序,采取Comparator即可。可调用Collections.sort()、Arrays.sort()方法。
2.TreeMap构造参数可传递Comparator。
其余随意。

注:
当我们需要对中文等排序时,可结合刚刚的排序方法。如下所示,可比较出中文的先后顺序。

String title1 = "北京;
String title2 = "上海";
int title = Collator.getInstance(Locale.CHINA).compare(title1, title2);

详细方法可参考其他文章:
http://www.hollischuang.com/archives/1292

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值