码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员——java学习9(毕15-16总结)——TreeSet

时间:2015-08-01 15:35:01      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

1、

 1 package learn;
 2 /*
 3  * |--TreeSet
 4  *             可以对Set集合排序
 5  *             底层数据结构是二叉树
 6  *             保证数据唯一性的依据:compareTo方法return 0;原序return 1;
 7  * 
 8  *         TreeSet排序的第一种方式:让元素子集具备比较性。元素需要实现compareTo接口,覆盖compareTo方法
 9  *         也称为元素的自然顺序,默认顺序
10  *        
11  *        TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的
12  *                            这是就需要让集合自身具备比较性
13  *                            在集合初始化时就有了比较方式 
14  * 
15  * 
16  * 需求:往TreeSet集合中存储自定义对象学生
17  * 想按照学生的年龄进行排序
18  * 
19  * 排序时,主要条件一致,一定要判断次要条件!
20  * */
21 import java.util.Iterator;
22 import java.util.TreeSet;
23 
24 import learn.Student;
25 
26 public class TreeSetDemo {
27     public static void main(String[] args) {
28         TreeSet ts=new TreeSet();
29         ts.add(new Student("lisi02",22));
30         ts.add(new Student("lisi007",20));
31         ts.add(new Student("lisi09",19));
32         ts.add(new Student("lisi08",19));
33 //        ts.add(new Student("lisi01",40));
34 
35         
36         Iterator it=ts.iterator();
37         while(it.hasNext())
38         {
39             Student stu=(Student)it.next();
40             System.out.println(stu.getName()+"..."+stu.getAge());
41         }
42     }
43 }
44 
45 class Student implements Comparable//该接口强制让学生具备比较性
46 {
47     private String name;
48     private int age;
49     Student(String name,int age)
50     {
51         this.name=name;
52         this.age=age;
53     }
54     public int compareTo(Object obj)
55     {
56         if(!(obj instanceof Student))
57             throw new RuntimeException("不是学生对象");
58         Student s =(Student)obj;
59         if(this.age>s.age)
60             return 1;
61         if(this.age==s.age)
62             return this.name.compareTo(s.name);
63         return -1;
64     }
65     public String getName()
66     {
67         return name;
68     }
69     public int getAge()
70     {
71         return age;
72     }
73 }

 

2、

 1 package learn2;
 2 /*
 3  * 当元素自身不具备比较性,或者具备的比较性不是所需要的
 4  * 这时需要让容器自身具备比较性
 5  * 定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数
 6  * 当两种排序都存在时,以比较器为主
 7  * 
 8  * 定义了一个类,实现Comparator接口,覆盖compare方法
 9  * */
10 import java.util.Comparator;
11 import java.util.Iterator;
12 import java.util.TreeSet;
13 
14 class Student implements Comparable//该接口强制让学生具备比较性
15 {
16     private String name;
17     private int age;
18     Student(String name,int age)
19     {
20         this.name=name;
21         this.age=age;
22     }
23     public int compareTo(Object obj)
24     {
25         if(!(obj instanceof Student))
26             throw new RuntimeException("不是学生对象");
27         Student s =(Student)obj;
28         if(this.age>s.age)
29             return 1;
30         if(this.age==s.age)
31             return this.name.compareTo(s.name);
32         return -1;
33     }
34     public String getName()
35     {
36         return name;
37     }
38     public int getAge()
39     {
40         return age;
41     }
42 }
43 public class TreeSetDemo2 {
44     public static void main(String[] args) {
45         TreeSet ts=new TreeSet(new MyCompare());
46         ts.add(new Student("lisi02",22));
47         ts.add(new Student("lisi007",20));
48         ts.add(new Student("lisi09",19));
49         ts.add(new Student("lisi06",19));
50 //        ts.add(new Student("lisi01",40));
51 
52         
53         Iterator it=ts.iterator();
54         while(it.hasNext())
55         {
56             Student stu=(Student)it.next();
57             System.out.println(stu.getName()+"..."+stu.getAge());
58         }
59     }
60 }
61 
62 class MyCompare implements Comparator
63 {
64     public int  compare(Object o1,Object o2)
65     {
66         Student s1=(Student)o1;
67         Student s2=(Student)o2;
68         
69         int num=s1.getName().compareTo(s2.getName());
70         if(num==0)
71         {
72             return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
73             /*
74             if(s1.getAge()>s2.getAge())
75                 return 1;
76             if(s1.getAge()==s2.getAge())
77                 return 0;
78                 */
79         }
80         return num;
81         
82     }
83 }

 

3、

 1 package Test;
 2 
 3 import java.util.Comparator;
 4 import java.util.Iterator;
 5 import java.util.TreeSet;
 6 
 7 /*
 8  * 练习,按照字符串长度排序
 9  * 字符串本身具备比较性,但是比较方式不是所需要的
10  * */
11 public class TreeSetTest {
12     public static void main(String[] args) {
13         TreeSet ts=new TreeSet(new StrLengthComparator());
14         ts.add("abcd");
15         ts.add("cc");
16         ts.add("cba");
17         ts.add("aaa");
18         ts.add("z");
19         ts.add("hahaha");
20         
21         Iterator it=ts.iterator();
22         while(it.hasNext())
23         {
24             System.out.println(it.next());
25         }
26     }
27 }
28 
29 class StrLengthComparator implements Comparator
30 {
31     public int compare(Object o1,Object o2)
32     {
33         String s1=(String)o1;
34         String s2=(String)o2;
35 //        if(s1.length()>s2.length())
36 //            return 1;
37 //        if(s1.length()==s2.length())
38 //            return 0;
39         int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
40         if(num==0)
41             return s1.compareTo(s2);
42         return num;
43     }
44 }

 

4、

黑马程序员——java学习9(毕15-16总结)——TreeSet

标签:

原文地址:http://www.cnblogs.com/sunxlfree1206/p/4694097.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!