Object 对象中并没有声明 compareTo 方法. comparaTo 是 Comparable 接口中唯一的方法.
类实现了Comparable接口,就表明它的实例具有内在的排序关系.
对实现了Comparable 接口的对象数组进行排序很简单:
Arrays.sort(a)
去掉命令行参数列表中重复参数,并按照字母顺序打印:(String 实现了Comparable 接口):
public class WordList {
public staitc void mian(String[] args){
Set<String> s = new TreeSet<String>();
Collections.addAll(s, args);
System.out.println(s);
}
}
事实上,Java平台类库中的所有值类都实现了Comparable接口.
Comparable 接口:
public interface Comparable<T> {
int comparaTo(T t);
}
comparaTo 方法的通用约定与equals方法的类似:
将这个对象与指定的对象进行比较.
如果该对象小于,等于或大于指定对象的时候,分别返回一个负整数,0或正整数.
如果由于指定对象的类型而无法与该对象进行比较,则抛出ClassCastException异常.
依赖于比较关系的类:
- 有序集合类:TreeSet, TreeMap
- 工具类: Collections, Arrays
它们内部包含有搜索和排序算法.
BigDecimal 的comparaTo方法与equals方法不一致:
public class ComparaTo_equals {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("1.00");
Set hs = new HashSet<BigDecimal>();
Set ts = new TreeSet<BigDecimal>();
hs.add(bd1);
hs.add(bd2);
System.out.println(hs); //[1.0, 1.00] HashSet使用 BigDecimal 的equals来判断是否相等
ts.add(bd1);
ts.add(bd2);
System.out.println(ts); //[1.0] TreeSet使用 BigDecimal 的compareTo来判断是否相等
}
}
实现Comparable接口中的compareTo 方法:
public class CaseInsensitiveString implements Comparable<CaseInsensitiveString>{
private String s;
public int compareTo(CaseInsensitiveString cis) {
return String.CASE_INSENSITIVE_ORDER.compare(s, cis.s);
}
... // Remainder omitted
}
网友评论