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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© franksight 高级黑马   /  2015-3-8 22:08  /  854 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

equals()在对象中可用于对象唯一性的判断,而compareTo()和compare()方法则是用于比较对象的具体属性;
compareTo()是一个对象实现Comparable接口而复写的方法,
而compare()则是一个自定义的比较器实现Comparator接口要实现的方法;
上代码:

  1. package jichuceshiheji;
  2. import java.util.*;
  3. /*
  4. * 16、 声明类Student,包含3个成员变量:name、age、score,创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)。
  5. */
  6. public class Ceshi16 {
  7.         public static void main(String[] args)
  8.         {
  9.                 //此处默认调用Student1的compareTo方法
  10.                 //TreeSet<Student1> ts=new TreeSet<Student1>();
  11.                 //若传入scoreComparator比较器,则会按照scoreComparator的compare方法排序
  12.                 TreeSet<Student1> ts=new TreeSet<Student1>(new scoreComparator());
  13.                
  14.                 //把学生对象添加到集合
  15.                 ts.add(new Student1("zhangsan1",20,88));
  16.                 ts.add(new Student1("zhangsan2",21,90));
  17.                 ts.add(new Student1("zhangsan3",22,89));
  18.                 ts.add(new Student1("zhangsan4",19,88));
  19.                 ts.add(new Student1("zhangsan5",20,85));
  20.                
  21.                 System.out.println("名字\t\t年龄\t分数");
  22.                 //按照成绩排序输出结果,如果分数相同,则再比较名字
  23.                 for(Student1 s:ts)
  24.                         System.out.println(s);
  25.         }
  26. }

  27. class scoreComparator implements Comparator<Student1>
  28. {
  29.         //复写比较器的方法
  30.         public int compare(Student1 o1, Student1 o2)
  31.         {
  32.                 if(o1.getScore()>o2.getScore())
  33.                         return 1;
  34.                 else if(o1.getScore()<o2.getScore())
  35.                         return -1;
  36.                 else
  37.                         return o1.getName().compareTo(o2.getName());//如果分数相同,则再比较名字
  38.         }
  39. }
  40. class Student1 implements Comparable
  41. {
  42.         private String name;
  43.         private int age;
  44.         private int score;
  45.         Student1(String name,int age,int score)
  46.         {
  47.                 this.name=name;
  48.                 this.age=age;
  49.                 this.score=score;
  50.         }
  51.         public String getName()
  52.         {
  53.                 return name;
  54.         }
  55.         public int getAge()
  56.         {
  57.                 return age;
  58.         }       
  59.         public int getScore()
  60.         {
  61.                 return score;
  62.         }
  63.         //确保元素唯一
  64.         public boolean equals(Object obj)
  65.         {
  66.                 if(!(obj instanceof Student1))
  67.                         throw new ClassCastException("类型非法");
  68.                 Student1 s=(Student1)obj;//把obj强转成Student1类型
  69.                 //若姓名,年龄,成绩均相同,则视为同一人
  70.                 return this.name.equals(s.name) && this.age==s.age && this.score==s.score;
  71.         }
  72.         //先按年龄排序,若相同,则再按姓名排。
  73.         public int compareTo(Object obj)
  74.         {
  75.                 if(!(obj instanceof Student1))
  76.                         throw new ClassCastException("类型非法");
  77.                 Student1 s=(Student1)obj;//把obj强转成Student1类型
  78.                
  79.                 if(this.age>s.age)
  80.                         return 1;
  81.                 else if(this.age<s.age)
  82.                         return -1;
  83.                 else
  84.                         return this.name.compareTo(s.name);
  85.         }
  86.         public String toString()
  87.         {
  88.                 return name+"\t"+age+"\t"+score;
  89.         }
  90. }
复制代码

希望对新人有所帮助。。。
不足之处,欢迎指正。。。

0 个回复

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