comparator java
- IT科技
- 關注:1.84W次
1、comparator簡介:
comparator是javase中的介面,位於java.util包下。
2、功能
comparator介面代表一個比較器,比較器具有可比性。
javase一些使用到Comparator介面的地方:
Arrays.sort(T[],Comparator<? super T> c);
Collections.sort(List<T> list,Comparator<? super T> c);
3、comparator使用場景
排序:需要比較兩個物件誰排在前誰排在後(排序也可以讓類實現Comparable介面,實現後該類的例項也具有排序能力)。
分組:需要比較兩個物件是否是屬於同一組。
舉例:
排序
在List或陣列中的物件如果沒有實現Comparable介面時,那麼就需要呼叫者為需要排序的陣列或List設定一個Compartor,Compartor的compare方法用來告訴程式碼應該怎麼去比較兩個例項,然後根據比較結果進行排序:
talk is cheap show me the code
package com.java.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* @author puyf
*/
public class SortTest {
class Dog{
public int age;
public String name;
public Dog(int age, String name) {
super();
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Dog [age=" + age + ", name=" + name + "]";
}
}
public static void main(String[] args) {
List<Dog> list= new ArrayList<>();
list.add(new SortTest().new Dog(5, "DogA"));
list.add(new SortTest().new Dog(6, "DogB"));
list.add(new SortTest().new Dog(7, "DogC"));
Collections.sort(list, new Comparator<Dog>() {
@Override
public int compare(Dog o1, Dog o2) {
return o2.age - o1.age;
}
});
System.out.println("給狗狗按照年齡倒序:"+list);
Collections.sort(list, new Comparator<Dog>() {
@Override
public int compare(Dog o1, Dog o2) {
return o1.name.compareTo(o2.name);
}
});
System.out.println("給狗狗按名字字母順序排序:"+list);
}
}
4、總結
一般需要做比較的邏輯都可以使用的上Comparator,最常用的場景就是排序和分組,排序常使用Arrays和Collections的sort方法,而分組則可以使用上面提供的divider方法。
排序和分組的區別在於:
排序時,兩個物件比較的結果有三種:大於,等於,小於。
分組時,兩個物件比較的結果只有兩種:等於(兩個物件屬於同一組),不等於(兩個物件屬於不同組)
- 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/dianzi/yqm4zk.html