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    责编:豆豆技术应用

正在加载评论...