JAVA对象比较器Comparator
http://tech.ddvip.com 2008年06月12日 社区交流
本文详细介绍JAVA对象比较器Comparator
排序的算法是我们最常用的算法,初学程序,每个人都尝试过排序。但只是局限于简单的排序。
如将下列数字进行排序
1,3,5,8,3,6
于是我们得出结果
1,3,3,5,6,8
将下列字母(字符)进行排序
a,i,e,f,w,s
于是我们得出结果
a,e,f,i,s,w
但是我们遇到的情况就不是如此简单了。如给公司里的商品进行排序,我们很轻易的想到按照商品的名称排序不就完了,而且简单明了。但现实并如我们相信般简单。同一商品名称可以有不同的批次,进货时间,可能还会有单价的不同。显然只根据商品名称排序是不合理的。
再举个简单例子然后用程序实现。如公司要将员工进行排序(不要说领导排在前面),假设我们的需求比较复杂。先进行姓排序,谁的姓拼音靠前,谁就排前面。然后对名字进行排序。恩.如果同名,女性排前头。如果名字和性别都相同,年龄小的排前头。ok,一个也不算复杂的需求。
如果对java比较熟悉的会知道java.util.Comparator 接口。要实现里面的函数
int compare(Object o1, Object o2) 返回一个基本类型的整型,返回负数表示o1 小于o2,返回0 表示o1和o2相等,返回正数表示o1大于o2。
于是我们设计的人员类要有几个变量,firstname,lastname,sex,age分别表示姓,名,性别,年龄。
publicclassPerson{
Stringfirstname,lastname;
Booleansex;
Integerage;
publicPerson(Stringfirstname,Stringlastname,Booleansex,Integerage){
this.firstname=firstname;
this.lastname=lastname;
this.sex=sex;
this.age=age;
}
publicStringgetFirstName(){
returnfirstname;
}
publicStringgetLastName(){
returnlastname;
}
publicBooleangetSex(){
returnsex;
}
publicIntegergetAge(){
returnage;
}
//为了输入方便,重写了toString()
publicStringtoString()
{
returnfirstname+""+lastname+""+(sex.booleanValue()?"男":"女")+""+age;
}
}
//endperson
来源:javaeye 作者:muscle-liu 责编:豆豆技术应用