- java.util.Comparator
- 1:java.util.Comparator是一个接口,只包含两个方法:
- 方法摘要
- int
- compare(To1,To2)
- 比较用来排序的两个参数。
- boolean
- equals(Objectobj)
- 指示是否其他对象“等于”此Comparator。
- 2:在JDK中对java.util.Comparator的功能的解释为:“强行对某些对象collection进行整体排序”。
- 具体的实现是在compare(To1,To2)方法中自定义排序算法,然后将Comparator对象(实现了java.util.Comparator接口的对象)作为一个参数传递给欲排序对象collection的某些排序方法。某些排序方法指的是能够接受java.util.Comparator参数的方法,比如:java.util.Arrays的publicstaticvoidsort(Object[]a,Comparatorc)
- 3:典型例程:
- importjava.util.Comparator;
- publicclassByWeightComparatorimplementsComparator
- {
- /**
- *ComparetwoTrucksbyweight.CallbackforsortorTreeMap.
- *effectivelyreturnsa-b;ordersbyascendingweight
- *
- *@parampFirstfirstobjectatobecompared
- *
- *@parampSecondsecondobjectbtobecompared
- *
- *@return+1ifa>b,0ifa=b,-1ifa<b
- */
- publicfinalintcompare(ObjectpFirst,ObjectpSecond)
- {
- longaFirstWeight=((Truck)pFirst).weight;
- longaSecondWeight=((Truck)pSecond).weight;
- /*needsignumtoconvertlongtoint,(int)willnotdo!*/
- returnsignum(aFirstWeight-aSecondWeight);
- }//endcompare
- /**
- *Collapsenumberdownto+10or-1dependingonsign.
- *Typicallyusedincompareroutinestocollapseadifference
- *oftwolongstoanint.
- *
- *@paramdiffusuallyrepresentsthedifferenceoftwolong.
- *
- *@returnsignumofdiff,+1,0or-1.
- */
- publicstaticfinalintsignum(longdiff)
- {
- if(diff>0)return1;
- if(diff<0)return-1;
- elsereturn0;
- }//endsignum
- }//endclassByWeight
- 程序来源:http://mindprod.com/jgloss/comparator.html
- 4:以下程序演示了如何对自定义对象进行排序:
- packagemypack;
- importjava.util.Arrays;
- importjava.util.Comparator;
- publicclassComparatorTest{
- @SuppressWarnings("unchecked")
- publicstaticvoidmain(String[]args){
- Dogo1=newDog("dog1",1,5);
- Dogo2=newDog("dog2",2,4);
- Dogo3=newDog("dog3",3,3);
- Dogo4=newDog("dog4",4,2);
- Dogo5=newDog("dog5",5,1);
- Dog[]dogs=newDog[]{o1,o4,o3,o5,o2};
- System.out.println("未排序前");
- for(inti=0;i<dogs.length;i++){
- Dogdog=dogs[i];
- System.out.println(dog.getName());
- }
- Arrays.sort(dogs,newByHeightComparator());
- System.out.println("使用高度排序之后:");
- for(inti=0;i<dogs.length;i++){
- Dogdog=dogs[i];
- System.out.println(dog.getName());
- }
- Arrays.sort(dogs,newByWeightComparator());
- System.out.println("使用重量排序之后:");
- for(inti=0;i<dogs.length;i++){
- Dogdog=dogs[i];
- System.out.println(dog.getName());
- }
- }
- }
- classDog{
- privateStringname;
- privateintweight;
- privateintheight;
- publicDog(Stringname,intweight,intheight){
- this.setName(name);
- this.weight=weight;
- this.height=height;
- }
- publicintgetHeight(){
- returnheight;
- }
- publicvoidsetHeight(intheight){
- this.height=height;
- }
- publicintgetWeight(){
- returnweight;
- }
- publicvoidsetWeight(intweight){
- this.weight=weight;
- }
- publicvoidsetName(Stringname){
- this.name=name;
- }
- publicStringgetName(){
- returnname;
- }
- }
- classByWeightComparatorimplementsComparator{
- publicintcompare(ObjectfirstDog,ObjectsecondDog){
- intfirstWeight=((Dog)firstDog).getWeight();
- intsecondWeight=((Dog)secondDog).getWeight();
- returnsignum(firstWeight-secondWeight);
- }
- publicstaticfinalintsignum(intdiff){
- if(diff>0)
- return1;
- if(diff<0)
- return-1;
- else
- return0;
- }
- }
- classByHeightComparatorimplementsComparator{
- publicintcompare(ObjectfirstDog,ObjectsecondDog){
- intfirstHeight=((Dog)firstDog).getHeight();
- intsecondHeight=((Dog)secondDog).getHeight();
- returnsignum(firstHeight-secondHeight);
- }
- publicstaticfinalintsignum(intdiff){
- if(diff>0)
- return1;
- if(diff<0)
- return-1;
- else
- return0;
- }
- }
- 5:以下程序演示了如何对中文进行排序
- packagemypack;
- importjava.text.Collator;
- importjava.text.RuleBasedCollator;
- importjava.util.Arrays;
- importjava.util.Locale;
- publicclassTest{
- publicstaticvoidmain(String[]args){
- String[]test=newString[]{"的","波","次","啊"};
- Arrays.sort(test,(RuleBasedCollator)Collator.getInstance(Locale.CHINA));
- for(Stringkey:test)
- System.out.println(key);
- }
- }