17.java Comparato和Comparable的使用
public class TreeSetDemo01 {
public static void main(String[] args) {
MyComparator myComparator=new MyComparator();
//让集合具有比较性
TreeSet<Person> treeSet=new TreeSet<Person>(myComparator);
treeSet.add(new Person("zhangsan",20));
treeSet.add(new Person("lisi",29));
System.out.println("treeSet="+treeSet);
}
/**
* 自定义排序规则类,使用这种方式进行比较,不需要让对象本身具有比较性.或者对象本身的比较规则不符合要求,都可以使用这种
* 方式进行比较
*
* 如果对象自身的比规则和当前比较器的比较规则发生冲突,以Comparator比较器的比较规则为准.
* @author dell
*也可以自定义比较器变成匿名内部类直接传值
*/
private static final class MyComparator implements Comparator<Person>{
public int compare(Person p1, Person p2) {
int result=p2.getName().compareTo(p1.getName());
if(result==0){
return p1.getAge()-p2.getAge();
}
return result;
}
// 当前类如果实现了Comparable接口,则说明这个类的对象具有比较性,比较规则通过Comparable接口中compareTo(Person person)指定.
//Comparable:让对象自身具有比较性
public class Person implements Comparable<Person>{
private String name;
private int age;
public int compareTo(Person person) {
System.out.println("====compareTo(Person person)=====");
int result=this.age-person.age;//当前对象-与之比较的对象得到的排序结果为:由小到大
//int result=person.age-this.age;//与之比较的对象-当前对象得到的排序结果为:由大到小
if(result==0){
return this.name.compareTo(person.name);//由小到大
//return person.name.compareTo(this.name);//由大到小
}
return result;
}}