关于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 }