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方法,不需要更改类的结构,更加独立。
浙公网安备 33010602011771号