SortedSet接口 ------TreeSet实现类 保证迭代器按照元素递增顺序遍历的集合,可以按照元素的自然顺序进行排序,或者按照创建有序集合时提供的 Comparator进行排序。 什么是自然顺序? 基本数据类型(包装类) 数值由小到大,引用数据类型 哈希值由小到大 在JDK类库中,有一部分类实现了Comparable接口,如Integer、Double和String等。Comparable接口有一个compareTo(Object o) 方法,它返回整数类型。 对于表达式,如果返回值为0,表示x和y相等,如果大于0,则表示x大于y,如果返回值小于0,则表示x小于y。 TreeSet:
根据其元素的自然顺序进行排序,调用对象的compareTo()方法比较集合中的元素 1 插入该 set 的所有元素都必须实现 Comparable 接口 2 所有这些元素都必须是可互相比较的(类型相同):对于 set 中的任意两个元素 e1 和 e2,执行 e1.compareTo(e2) 都不得抛出 ClassCastException。 如果用户试图将违反此约束的元素添加到 set(例如,用户试图将字符串元素添加到其元素为整数的 set 中),则 add 调用将抛出 ClassCastException。 如: //new String("10").compareTo(10);(在比较之前会进行类型转换) //Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
Comparable接口
public int compareTo(Object?o); 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。 如果是自定义类并且没有实现此接口,无法通过该接口进行对象的比较。 所以要使自己的类能够进行比较,那么实现该接口,并重写compareTo()方法,自定义定义对象比较规则 Comparator接口 public int compare(Object?o1, Object?o2) ; 比较用来排序的两个参数。随第一个参数小于、等于或大于第二个参数而分别返回负整数、零或正整数 boolean equals(Object obj) 该方法可以不实现。 适用于其他人写的类和自定义的类。 比较Comparable接口和Comparator接口 Comparable,比较对象的本身(要将该对象放到排序的集合类的时候) Comparator,其他人写的类和自定义的类,为其他类的比较制定比较规则(比较器)
|