Comparator接口
*强行对某个对象进行整体排序的比较函数
*可以将Comparator传递给sort方法(如 Collections.sort或Arrays.sort)
方法
*int compare(T O1,T O2) 比较用来排序的两个参数。
-如果o1
-如果o1>o2,返回正整数
*boolean equals(Object odj)指示某个其他对象是否“等于”此
Comparator
此方法可以被Object类中的equals方法覆盖,不必重写。
package com.imooc.sort;
public class Cat {
private String name;
private int month;
private String species;
public Cat(String name, int month, String species) {
super();
this.name = name;
this.month = month;
this.species = species;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public String getSpecies() {
return species;
}
public void setSpecies(String species) {
this.species = species;
}
@Override
public String toString() {
return "Cat [name=" + name + ", month=" + month + ", species=" + species + "]";
}
}
package com.imooc.sort;
import java.util.Comparator;
public class NameComparator implements Comparator {
@Override
public int compare(Cat o1, Cat o2) {
// 按名字升序排序
String name1 = o1.getName();
String name2 = o2.getName();
int n = name1.compareTo(name2);//这个返回值与compare的返回值规则是一样的
//int n = name2.compareTo(name1);//这样就是降序排序
return n;
}
}
package com.imooc.sort;
import java.util.Comparator;
public class AgeComparator implements Comparator {
@Override
public int compare(Cat o1, Cat o2) {
//按年龄降序排序
int age1 = o1.getMonth();
int age2 = o2.getMonth();
return age2 - age1;
}
}
package com.imooc.sort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CatTest {
public static void main(String[] args) {
// 按名字升序排序
Cat huahua = new Cat("huahua",5,"英国短毛猫");
Cat fanfan = new Cat("fanfan",2,"中华田园猫");
Cat maomao = new Cat("maomao",3,"中华田园猫");
List catList = new ArrayList();
catList.add(huahua);
catList.add(fanfan);
catList.add(maomao);
System.out.println("按名字排序前:");
for(Cat cat:catList) {
System.out.println(cat);
}
Collections.sort(catList,new NameComparator());//按照NameComparator里面定义的规则进行排序
System.out.println("按名字排序后:");
for(Cat cat:catList) {
System.out.println(cat);
}
//按年龄进行降序排序
Collections.sort(catList,new AgeComparator());//按照NameComparator里面定义的规则进行排序
System.out.println("按年龄降序后:");
for(Cat cat:catList) {
System.out.println(cat);
}
}
}
结果:
按名字排序前:
Cat [name=huahua, month=5, species=英国短毛猫]
Cat [name=fanfan, month=2, species=中华田园猫]
Cat [name=maomao, month=3, species=中华田园猫]
按名字排序后:
Cat [name=fanfan, month=2, species=中华田园猫]
Cat [name=huahua, month=5, species=英国短毛猫]
Cat [name=maomao, month=3, species=中华田园猫]
按年龄降序后:
Cat [name=huahua, month=5, species=英国短毛猫]
Cat [name=maomao, month=3, species=中华田园猫]
Cat [name=fanfan, month=2, species=中华田园猫]