TreeSet(底层是使用了二叉树数据结构实现,可以对元素进行排序),但是它的存储有点复杂啊:
1. 如果往TreeSet添加元素的时候,如果元素本身具备自然顺序的特性,那么treeSet就会按照元素自然顺序的特性进行排序存储。
2. 如果往TreeSet添加元素的时候, 如果元素本身不具备自然顺序的特性, 那么元素所属的类就必须要实现Comparable接口,
把元素的比较规则定义在compareTo(T o)方法上。
3. 在TreeSet中如果比较的方法返回的是0,该元素则被视为重复元素,不允许添加。
4. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,而且元素所属的类没有实现Comparable接口, 那么在创建TreeSet对象 的时候就必须要传入一个比较器对象(Comparator)。
- class Emp implements Comparable {
-
- String name;
-
- int age;
-
- double salary;
-
- public Emp(String name, int age, double salary) {
- this.name = name;
- this.age = age;
- this.salary = salary;
- }
-
- @Override
- public String toString() {
- return "{ 姓名:"+ this.name+" 年龄:"+ this.age+ " 薪水:"+this.salary+"}";
- }
-
- /*
- * 元素与元素之间的比较规则定义在COmparaTo方法上。(non-Javadoc)
- 返回值:负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
-
- */
- @Override // 100.52 - 100.32 = 0.2
- public int compareTo(Object o) {
- Emp e = (Emp)o;
- return (int)((this.salary-e.salary)*100);
- }
- }
-
- //自定义一个比较器类
- class AgeComparator implements Comparator{
-
- @Override
- public int compare(Object o1, Object o2) {
- Emp e1 = (Emp)o1;
- Emp e2 = (Emp)o2;
-
- return e1.age - e2.age;
- }
- }
-
-
-
-
-
- public class Demo3 {
-
- public static void main(String[] args) {
- //创建一个比较器对象
- AgeComparator ageComparator = new AgeComparator();
-
- TreeSet tree = new TreeSet(ageComparator);
- tree.add(new Emp("家宝",68,200));
- tree.add(new Emp("永康",78,100));
- tree.add(new Emp("习总",58,300));
- tree.add(new Emp("克强",48,500));
-
- System.out.println(tree);
- }
-
- }
复制代码 在我的blog中有写,欢迎指正
http://blog.csdn.net/lizewenhh/article/details/46367805 |