1.定制排序,即是自己寫一個比較器.可命名為MyComparator.
2.在定義set的時候,后面的()里面要 創(chuàng)建構(gòu)造器對象
TreeSet<Person> set = new TreeSet<>(new MyComparator());
3.自定義的MyComparator類要實現(xiàn) Comparator接口.里面用到的person類和book類就是用的是<Treeset之自然排序>中的person和book類, 還要重寫 compare方法,傳進來兩個Person對象.自然排序看懂之后,定制排序就很簡單.
無非就是在定義set的時候創(chuàng)建一個構(gòu)造器作為參數(shù).
自定義構(gòu)造類實現(xiàn)Comparator接口.
重寫compare方法.
4.重寫compare方法的時候,方法的兩個參數(shù)前面的代表this對象,則是要添加到set集合的對象,第二個參數(shù)是代表接口的對象.
package com.qf.demo7;
import java.util.Comparator;
import java.util.TreeSet;
import com.qf.demo6.Book;
import com.qf.demo6.Person;
/**
* 自然排序
* 集合泛型類 中 實現(xiàn) Comparable , 重寫 compareTo
* TreeSet構(gòu)造方法不需要添加參數(shù)
* 定制排序
* 單獨創(chuàng)建一個比較器的類 實現(xiàn)Comparator 重寫 compare
* TreeSet構(gòu)造方法必須添加 參數(shù) comparator 對象
*
*
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
TreeSet<Person> set = new TreeSet<>(new MyComparator());
set.add(new Person("xiaoming", 5, new Book("renzaijiogtu", 4)));
set.add(new Person("xiaoming", 1, new Book("renzaijiogtu", 4)));
set.add(new Person("xiaoming", 5, new Book("renzaijiogtu", 4)));
System.out.println(set);
}
}
// 比較器
class MyComparator implements Comparator<Person>{
// 參數(shù)1 相當于 調(diào)用者 參數(shù)2 相當于 參數(shù)
@Override // this--o1 o --> o2
public int compare(Person o1, Person o2) {
if(o1.getAge()>o2.getAge()){
return -1;
}else if(o1.getAge()<o2.getAge()){
return 1;
}else{
//這里和自然排序的一樣
}
return 0;
}
}