集合框架-TreeSet集合-二叉树

集合框架-TreeSet集合-二叉树
 1 package cn.itcast.p5.treeset.demo;
 2 
 3 import java.util.Iterator;
 4 import java.util.TreeSet;
 5 
 6 import cn.itcast.p.bean.Person;
 7 
 8 public class TreeSetDemo {
 9 
10     public static void main(String[] args) {
11         // TODO Auto-generated method stub
12 //        demo1();
13         TreeSet ts = new TreeSet(new ComparatorByName());//比较器排序优先于person的自然排序,实际开发比较器常用,person一般会实现comparator接口
14         /*
15          * 按添加顺序读取,二叉树
16          * 
17          */
18         ts.add(new Person("zhangsan",28));
19         ts.add(new Person("wangwu",29));
20         ts.add(new Person("lisi",21));
21         ts.add(new Person("zhouqi",29));
22         ts.add(new Person("zhaoliu",25));//Person cannot be cast to class java.lang.Comparable
23         
24         Iterator it = ts.iterator();
25         
26         while(it.hasNext()) {
27             Person p = (Person)it.next();
28             
29             System.out.println(p.getName()+":"+p.getAge());
30         }
31     }
32 
33     
34 
35     /**
36      * 
37      */
38     public static void demo1() {
39         TreeSet ts = new TreeSet();
40         
41         ts.add("abc");
42         ts.add("zaa");
43         ts.add("aa");
44         ts.add("nba");
45         ts.add("cba");
46         
47         Iterator it = ts.iterator();
48         
49         while(it.hasNext()) {
50             System.out.println(it.next());
51         }
52     }
53 
54 }
TreeSet 集合框架-TreeSet集合-二叉树
 1 package cn.itcast.p.bean;
 2 
 3 public class Person /*treeset用*/implements  Comparable {
 4     private String name;
 5     private int age;
 6     
 7     
 8     public Person() {
 9         super();
10         // TODO Auto-generated constructor stub
11     }
12     public Person(String name, int age) {
13         super();
14         this.name = name;
15         this.age = age;
16         
17     }
18     
19     @Override
20     public int hashCode() {
21         System.out.println(this+".....hashCode");
22         // TODO Auto-generated method stub
23         return name.hashCode()+age*27;//age后面乘以一个数增大离散程度,减少返回哈希值相等的几率
24                                     //好比张三哈希值20 年龄40  李四哈希值30,年龄30 结果哈希值一样
25                                     //乘一个数后就不一样了离散程度变大了
26         
27         
28         //return 100;//会比较equals
29     }
30     public boolean equals(Object obj) {
31         //健壮性
32         if (this == obj) {//有可能传入相同的对象,可以先行判断是否为同一对象add(p) add(p)这种传入两次
33             return true;
34         }
35         if (!(obj instanceof Person)) {//判断是否为Person类型,类型不一致也不应该传入
36             throw new ClassCastException("类型错误");
37         }
38         
39 //        System.out.println(this+"...equals...."+obj);
40         Person p = (Person)obj;
41         
42         
43         return this.name.equals(p.name) && this.age == p.age;
44     }
45     public String getName() {
46         return name;
47     }
48     public void setName(String name) {
49         this.name = name;
50     }
51     public int getAge() {
52         return age;
53     }
54     public void setAge(int age) {
55         this.age = age;
56     }
57     //ctrl+alt+s 快捷构造set,get方法 初始化等
58     public String toString() {
59         return name+":"+age;
60     }
61     @Override
62     public int compareTo(Object o) {//对象的自然排序(treeset)
63         // TODO Auto-generated method stub
64         Person p = (Person)o;
65         int temp = this.age - p.age;
66         return temp==0?this.name.compareTo(p.name):temp;//主要条件次要条件,以年龄
67         
68 //        int temp = this.name.compareTo(p.name);
69 //        return temp==0?this.age-p.age:temp;//以名字为主要条件
70         /*
71          * if (this.age>p.age) 
72          * return 1;
73          * 
74          * if (this.age<p.age)
75          *  return -1; 
76          * if (this.age == p.age) {
77          *  return this.name.compareTo(p.name);
78          *  }
79          */
80         
81     }
82 }
Person 集合框架-TreeSet集合-二叉树
 1 package cn.itcast.p5.treeset.demo;
 2 
 3 import java.util.Comparator;
 4 
 5 import cn.itcast.p.bean.Person;
 6 /*
 7  * 创建了一个根据Person类的name进行排序的比较器
 8  */
 9 public class ComparatorByName implements Comparator {
10 
11     @Override
12     public int compare(Object o1, Object o2) {
13         // TODO Auto-generated method stub
14         Person p1 = (Person)o1;
15         Person p2 = (Person)o2;
16         
17 //        int temp = p1.getName().compareTo(p2.getName());
18 //        
19 //        return temp==0?p1.getAge()-p2.getAge():temp;
20         return 1;//有序
21 //        return -1;//倒序
22         
23     }
24 
25 }
ComparatorByName

 

上一篇:Java中的Set类


下一篇:Java - Set接口