关于comparable与comparator的用法(即自定义集合框架用法 )

  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 }

 

posted @ 2015-12-27 11:33  夏冬青  阅读(427)  评论(0编辑  收藏  举报