Comparator接口
*強(qiáng)行對(duì)某個(gè)對(duì)象進(jìn)行整體排序的比較函數(shù)
*可以將Comparator傳遞給sort方法(如 Collections.sort或Arrays.sort)
方法
*int compare(T O1,T O2) 比較用來排序的兩個(gè)參數(shù)钱雷。
-如果o1<o2,返回負(fù)整數(shù)
-如果o1==o2,返回0
-如果o1>o2,返回正整數(shù)
*boolean equals(Object odj)指示某個(gè)其他對(duì)象是否“等于”此
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<Cat> {
@Override
public int compare(Cat o1, Cat o2) {
// 按名字升序排序
String name1 = o1.getName();
String name2 = o2.getName();
int n = name1.compareTo(name2);//這個(gè)返回值與compare的返回值規(guī)則是一樣的
//int n = name2.compareTo(name1);//這樣就是降序排序
return n;
}
}
package com.imooc.sort;
import java.util.Comparator;
public class AgeComparator implements Comparator<Cat> {
@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<Cat> catList = new ArrayList<Cat>();
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里面定義的規(guī)則進(jìn)行排序
System.out.println("按名字排序后:");
for(Cat cat:catList) {
System.out.println(cat);
}
//按年齡進(jìn)行降序排序
Collections.sort(catList,new AgeComparator());//按照NameComparator里面定義的規(guī)則進(jìn)行排序
System.out.println("按年齡降序后:");
for(Cat cat:catList) {
System.out.println(cat);
}
}
}
結(jié)果:
按名字排序前:
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=中華田園貓]