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方法,不需要更改类的结构,更加独立。