1 package javastudy;
2
3 import java.util.Comparator;
4 import java.util.Iterator;
5 import java.util.TreeSet;
6 public class Ptext {
7
8 public static void main(String[] args) {
9 // TODO Auto-generated method stub
10 //关于comparable的用法:以Person为例进行排序:
11 /**用法声明
12 * 1。建立一个Person类,并定义name,age
13 * 2.建立Person的构造函数
14 * 3.建立Person集合框架,并在数组中赋值,遍历打印输出。
15 * 4.运行,会报错,原因是两个不能比较,所以在此要建立比较方法
16 * 5.在Person中继承comparable,并重写方法。
17 * 6.根据api中内容,定义比较值还回-1,1,0.
18 * 7.运行
19 * */
20 TreeSet<Person> ts = new TreeSet<Person>();
21 ts.add(new Person("Mark",12));
22 ts.add(new Person("Keven",16));
23 ts.add(new Person("Bob",20));
24 ts.add(new Person("Jine",19));
25 for(Iterator<Person> it=ts.iterator();it.hasNext();)
26 {
27 Person p = it.next();
28 p.show();
29 System.out.println(it.next());
30 }
31 //自己建立一个比较器,即comparator的用法,以Dog为例进行;
32 /**
33 * 1.与person类似,建立Dog类,并定义name,weight;
34 * 2.建立构造方法;
35 * 3.打印输出或者建立toString方法(原因,如果不建立打印输出方法,在主函数中遍历是会出现javastudy.Person@4aa298b7这种类型)
36 * 4。在主函数中建立自定义Dog的集合数组,
37 * 5.建立一个自定义比较器,MyCom并集成Comparator
38 * 6.定义比较方法
39 * 7.运行。
40 * */
41 TreeSet<Dog> ds = new TreeSet<Dog>(new MyCom());
42 ds.add(new Dog("Mark",12));
43 ds.add(new Dog("Keven",16));
44 ds.add(new Dog("Bob",20));
45 ds.add(new Dog("Jine",19));
46 for(Iterator<Dog> it=ds.iterator();it.hasNext();)
47 {
48 System.out.println(it.next());
49 }
50 }
51
52 }
53
54 class Person implements Comparable<Person> {
55 String name;
56 int age;
57 Person(String name,int age)
58 {
59 this.name=name;
60 this.age=age;
61 }
62 void show(){
63 System.out.println(String.format("姓名=%s,年龄=%d", name,age));
64 }
65
66 public int compareTo(Person o) {
67 // TODO Auto-generated method stub
68 if(this.age < o.age)
69 {
70 return 1;
71 }
72 else if(this.age>o.age)
73 {
74 return -1;
75 }
76 else
77 {
78 return 0;
79 }
80 }
81 }
82 //关于comparator的用法,即DOG例子说明;
83
84 class MyCom implements Comparator<Dog>
85 {
86
87 @Override
88 public int compare(Dog arg0, Dog arg1) {
89 // TODO Auto-generated method stub
90 //这里与return 1 ,-1,0.的用法一样,这是简写。
91 //注:因为建立的自定义比较Dog1,与dog2,所以这里两种方法都可以使用。而第一种只是利用comparable不行。
92 return arg0.name.compareTo(arg1.name);
93 }
94
95 }
96 class Dog
97 {
98 String name;
99 int weight;
100 Dog(String name,int weight)
101 {
102 this.name=name;
103 this.weight=weight;
104 }
105 @Override
106 public String toString() {
107 return "Dog [name=" + name + ", weight=" + weight + "]";
108 }
109 }