comparable和comparator的异同

public class Domain implements Comparable<Domain>{
    private String str;

    public Domain(String str){
        this.str = str;
    }

    public int compareTo(Domain domain){
        if(this.str.compareTo(domain.str) == 0){
            return 0;
        }else if(this.str.compareTo(domain.str) > 0){
            return 1;
        }else{
            return -1;
        }
    }

    public static void main(String[] args) {
        Domain d1 = new Domain("a");
        Domain d2 = new Domain("b");
        Domain d3 = new Domain("c");
        System.out.println(d1.compareTo(d2));
        System.out.println(d2.compareTo(d3));
        System.out.println(d3.compareTo(d1));
    }
}

//comparable是一个内部比较器,实现comparable接口,内部实现compareTo方法,返回1代表大于,返回-1代表小于,返回0代表相等


comparator可以视为外比较器,有两种比较可以使用外比较器

1. 首先类没有实现comparable接口

2. 类实现的compareTo方法不是自己想要的

import java.util.*;

public class DomainComparator implements Comparator<Domain>{
    public int compare(Domain o1,Domain o2){
        if(o1.getStr().compareTo(o2.getStr()) > 0){
            return 1;
        }
        else if(o1.getStr().compareTo(o2.getStr()) == 0){
            return 0;
        }
        else{
            return -1;
        }
    }

    public static void main(String[] args) {
        Domain d1 = new Domain("a");
        Domain d2 = new Domain("b");
        Domain d3 = new Domain("c");
        DomainComparator domainComparator = new DomainComparator();
        System.out.println(domainComparator.compare(d1,d2));
    }
}

class Domain{
    private String str;

    public Domain(String str){
        this.str = str;
    }

    public String getStr(){
        return str;
    }
}

//创建一个外部比较器

两者比较:

comparator可能耦合性比较低,如果改变比较算法,只需要更改compare方法,不需要更改类的结构,更加独立。

原文地址:https://www.cnblogs.com/zhangchiblog/p/8604946.html