effective java (12) 考虑实现Comparable接口

接口Comparable

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

可以帮助我们使用一些集合工具进行排序。一般情况下,实现这个接口要满足3个约定,

1. 对称性:sgn(x.compareTo(y)) == -sgn(y.compareTo(x))

2. 传递性: x.compareTo(y)  > 0 && y.compareTo(z) > 0, 则x.compareTo(z) > 0

3. 对等性:x.compareTo(y) ==0 则 sgn(x.compareTo(z)) == sgn(y.compareTo(z));

另外,建议如果x.compareTo(y)==0 则 x.equals(y)

TreeSet、TreeMap以及Collections, Arrays会比较依赖Comparable接口,特别是一些搜索和排序算法。

以下是一个比较高效的comparable接口实现例子,利用compareTo 返回int并非必须是0, 1, -1的特性,实现比较接口:

public class City implements Comparalble<City>{
   private int provinceCode;
   private int cityCode;
   // ....
   @Override
   public int compareTo(City c){
     int difProv = provinceCode = c.getProvinceCode();
    if(difProv !=0){
       return diffProv;
    }
    return cityCode - c.getCityCode(); 
   }
  

}


你可能感兴趣的:(java,comparable,effective,interface,排序算法)