黑马程序员技术交流社区
标题:
compareTo()、compare()、equals()
[打印本页]
作者:
franksight
时间:
2015-3-8 22:08
标题:
compareTo()、compare()、equals()
equals()在对象中可用于对象唯一性的判断,而compareTo()和compare()方法则是用于比较对象的具体属性;
compareTo()是一个对象实现Comparable接口而复写的方法,
而compare()则是一个自定义的比较器实现Comparator接口要实现的方法;
上代码:
package jichuceshiheji;
import java.util.*;
/*
* 16、 声明类Student,包含3个成员变量:name、age、score,创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)。
*/
public class Ceshi16 {
public static void main(String[] args)
{
//此处默认调用Student1的compareTo方法
//TreeSet<Student1> ts=new TreeSet<Student1>();
//若传入scoreComparator比较器,则会按照scoreComparator的compare方法排序
TreeSet<Student1> ts=new TreeSet<Student1>(new scoreComparator());
//把学生对象添加到集合
ts.add(new Student1("zhangsan1",20,88));
ts.add(new Student1("zhangsan2",21,90));
ts.add(new Student1("zhangsan3",22,89));
ts.add(new Student1("zhangsan4",19,88));
ts.add(new Student1("zhangsan5",20,85));
System.out.println("名字\t\t年龄\t分数");
//按照成绩排序输出结果,如果分数相同,则再比较名字
for(Student1 s:ts)
System.out.println(s);
}
}
class scoreComparator implements Comparator<Student1>
{
//复写比较器的方法
public int compare(Student1 o1, Student1 o2)
{
if(o1.getScore()>o2.getScore())
return 1;
else if(o1.getScore()<o2.getScore())
return -1;
else
return o1.getName().compareTo(o2.getName());//如果分数相同,则再比较名字
}
}
class Student1 implements Comparable
{
private String name;
private int age;
private int score;
Student1(String name,int age,int score)
{
this.name=name;
this.age=age;
this.score=score;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public int getScore()
{
return score;
}
//确保元素唯一
public boolean equals(Object obj)
{
if(!(obj instanceof Student1))
throw new ClassCastException("类型非法");
Student1 s=(Student1)obj;//把obj强转成Student1类型
//若姓名,年龄,成绩均相同,则视为同一人
return this.name.equals(s.name) && this.age==s.age && this.score==s.score;
}
//先按年龄排序,若相同,则再按姓名排。
public int compareTo(Object obj)
{
if(!(obj instanceof Student1))
throw new ClassCastException("类型非法");
Student1 s=(Student1)obj;//把obj强转成Student1类型
if(this.age>s.age)
return 1;
else if(this.age<s.age)
return -1;
else
return this.name.compareTo(s.name);
}
public String toString()
{
return name+"\t"+age+"\t"+score;
}
}
复制代码
希望对新人有所帮助。。。
不足之处,欢迎指正。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2