A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public class TreeSetTest {  
  2.     public static void main(String[] args){  
  3.         TreeSet<Student> set = new TreeSet<Student>();  
  4.         Student stu1 = new Student("zhangsan",10) ;  
  5.         Student stu2 = new Student("zhangsan",11) ;  
  6.         Student stu3 = new Student("lisi",10) ;  
  7.         Student stu4 = new Student("wangwu",20) ;  
  8.         set.add(stu1);  
  9.         set.add(stu2);  
  10.         set.add(stu3);  
  11.         set.add(stu4);  
  12.          
  13.         for(Student stu :set){  
  14.             System.out.println(stu);  
  15.         }  
  16.          
  17.         System.out.println("---------------------------");  
  18.          
  19.         TreeSet<Student> set2 = new TreeSet<Student>(new MyComparator());  
  20.         set2.add(stu1);  
  21.         set2.add(stu2);  
  22.         set2.add(stu3);  
  23.         set2.add(stu4);  
  24.          
  25.         for(Student stu :set2){  
  26.             System.out.println(stu);  
  27.         }  
  28.     }  
  29. }  
  30.   
  31. /*
  32. * 自定义的比较器类
  33. * 实现Comparator接口,从写,conpare()方法
  34. * 按年龄排序,年龄相同,按姓名排序
  35. */  
  36. class MyComparator implements Comparator{  
  37.       
  38.     @Override  
  39.     public int compare(Object o1, Object o2) {  
  40.         Student s1 = (Student) o1;  
  41.         Student s2 = (Student) o2 ;  
  42.         int temp =  s1.getage()-s2.getage();  
  43.         return temp==0?s1.getname().compareTo(s2.getname()):temp;  
  44.     }  
  45. }  
  46.   
  47. class Student implements Comparable{  
  48.     int age ;  
  49.     String name ;  
  50.     public Student(String name ,int age){  
  51.         this.age = age ;  
  52.         this.name = name ;  
  53.     }  
  54.       
  55.     public String getname(){  
  56.         return name;  
  57.     }  
  58.     public int getage(){  
  59.         return age;  
  60.     }  
  61.     //Student本身的比较方法  
  62.     //先按姓名排序,姓名相同,按年龄排序  
  63.     @Override  
  64.     public int compareTo(Object o) {  
  65.         System.out.println(this.name+"..compareTo.."+((Student) o).getname());  
  66.         int temp = this.name.compareToIgnoreCase(((Student) o).getname());  
  67.         return temp== 0?this.age-((Student) o).getage():temp;  
  68.     }  
  69.     @Override  
  70.     public int hashCode() {  
  71.         System.out.println(this.name+" hash code..");  
  72.         final int prime = 31;  
  73.         int result = 1;  
  74.         result = prime * result + age;  
  75.         result = prime * result + ((name == null) ? 0 : name.hashCode());  
  76.         return result;  
  77.     }  
  78.   
  79.     @Override  
  80.     public boolean equals(Object obj) {  
  81.         System.out.println(this.name+"..equals.."+((Student) obj).getname());  
  82.         if (this == obj)  
  83.             return true;  
  84.         if (obj == null)  
  85.             return false;  
  86.         if (getClass() != obj.getClass())  
  87.             return false;  
  88.         Student other = (Student) obj;  
  89.         if (age != other.age)  
  90.             return false;  
  91.         if (name == null) {  
  92.             if (other.name != null)  
  93.                 return false;  
  94.         } else if (!name.equals(other.name))  
  95.             return false;  
  96.         return true;  
  97.     }  
  98.     @Override  
  99.     public String toString() {  
  100.         return "[name=" + name + ",age=" + age + "]";  
  101.     }     
  102. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马