當前位置:科普知識站>IT科技>

java|comparator

IT科技 閲讀(1.97W)

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接口,實現後該類的實例也具有排序能力)。

分組:需要比較兩個對象是否是屬於同一組。

java comparator

舉例:

排序

在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);

}

}

java comparator 第2張

4、總結

一般需要做比較的邏輯都可以使用的上Comparator,最常用的場景就是排序和分組,排序常使用Arrays和Collections的sort方法,而分組則可以使用上面提供的divider方法。

排序和分組的區別在於:

排序時,兩個對象比較的結果有三種:大於,等於,小於。

分組時,兩個對象比較的結果只有兩種:等於(兩個對象屬於同一組),不等於(兩個對象屬於不同組)