JAVA TreeSet
2013-03-14 23:25
225 查看
//仅作为学习笔记
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
实现类必须确保对于所有的 x 和 y 都存在 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的关系。(这意味着如果 y.compareTo(x) 抛出一个异常,则 x.compareTo(y) 也要抛出一个异常。)
实现类还必须确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0。
最后,实现者必须确保 x.compareTo(y)==0 意味着对于所有的 z,都存在 sgn(x.compareTo(z)) == sgn(y.compareTo(z))。 强烈推荐(x.compareTo(y)==0) == (x.equals(y)) 这种做法,但并不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与
equals 不一致的自然排序。”
在前面的描述中,符号 sgn(expression) 指定 signum 数学函数,该函数根据 expression 的值是负数、零还是正数,分别返回 -1、0 或 1 中的一个值。
参数:
/* Set : 无序,不可以重复元素 |--HashSet:数据结构是哈希表,线程是非同步的 保证元素唯一性原理: 判断元素的HashCode值是否相同 如果相同,还会继续判断元素的equals方法是否为True |TreeSet: 可以对集合中的元素进行排序 底层数据结构是二叉树 保证元素唯一性的依据是 compareTo方法 TreeSet排序的第一种方式:让元素自身具备比较性 元素需要实现Comparable接口,覆盖compareTo方法 这种方式也称为元素的自然顺序,或者叫做默认顺序 */ import java.util.*; class Student implements Comparable//该接口强制让学生具备比较性 { private String name; private int age; Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public int compareTo(Object obj)//覆盖父类中的函数 { if( !(obj instanceof Student)) throw new RuntimeException("不是学生对象!"); Student stu = (Student)obj; if(this.age < stu.age) return -1; if(stu.age == this.age) return this.name.compareTo(stu.name);//当主要条件相同时 ,也要判断次要条件 return 1; } } class TreeSetDemo { public static void main(String []args) { TreeSet ts = new TreeSet(); ts.add(new Student("NUM3",33)); ts.add(new Student("NUM2",22)); ts.add(new Student("NUM1",11)); ts.add(new Student("NUM4",44)); // ts.add("aab"); // ts.add("aaa"); // ts.add("aaba"); // ts.add("cdb"); // ts.add("Dad");//大写的D 的ASCLL 码值比a 小 // //TreeSet 是按照元素的ASCLL 大小进行排序 Iterator it = ts.iterator(); while( it.hasNext()) { Student s = (Student)it.next(); sop( s.getName() + " "+ s.getAge()); } } public static void sop(Object obj) { System.out.println(obj); } }
compareTo
int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
实现类必须确保对于所有的 x 和 y 都存在 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的关系。(这意味着如果 y.compareTo(x) 抛出一个异常,则 x.compareTo(y) 也要抛出一个异常。)
实现类还必须确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0。
最后,实现者必须确保 x.compareTo(y)==0 意味着对于所有的 z,都存在 sgn(x.compareTo(z)) == sgn(y.compareTo(z))。 强烈推荐(x.compareTo(y)==0) == (x.equals(y)) 这种做法,但并不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与
equals 不一致的自然排序。”
在前面的描述中,符号 sgn(expression) 指定 signum 数学函数,该函数根据 expression 的值是负数、零还是正数,分别返回 -1、0 或 1 中的一个值。
参数:
o- 要比较的对象。返回:负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。抛出:
ClassCastException- 如果指定对象的类型不允许它与此对象进行比较。
相关文章推荐
- Java集合之TreeSet
- Java提高十七:TreeSet 深入分析
- Java基础15:treeset;排序方法-比较器;泛型;
- Java集合之TreeSet
- java集合Set的应用(HashSet、Tree…
- Java集合容器系列09 - TreeSet
- java集合——树集(TreeSet)+对象的比较
- java基础:Set之TreeSet
- Java TreeSet
- Java集合之TreeSet
- java guava TreeRangeSet实现插入一个不重复的IP段
- java.util.TreeSet.floor()方法和java.util.TreeSet.ceiling()方法
- 【转】java中的TreeMap与TreeSet关系及实现(红黑树)
- Java解惑之TreeSet是如何去重的
- Java TreeSet 应用
- java学习笔记:集合框架之TreeSet
- 【java编程】Collection类之TreeSet按字符串长度排序
- java.util(一)HashMap TreeMap TreeSet
- Java集合之TreeSet
- Java学习之TreeSet的反序