当前位置: 代码迷 >> 综合 >> Comparable 和 Comparator
  详细解决方案

Comparable 和 Comparator

热度:54   发布时间:2024-02-12 00:54:12.0

从字面来看,Comparable 可比较的,Comparator 比较器

 

Comparable

 

所有可以 “排序” 的类都实现 Comparable 接口,该接口中只有一个

public int compareTo(Object obj) ;

方法。

该方法:

返回 0 表示 this == obj

返回正整数表示 this > obj

返回负整数表示 this < obj

 

3:实现了 Comparable 接口的类通过实现 comparaTo 方法从而确定该类对象的排序方式。

 

 

// System.out.println("11".compareTo(null));

 

// 由于 null 不是一个类,也不是一个对象,因此在重写 compareTo 方法时应该注意 e.compareTo(null) 的情况,

// 即使 e.equals(null) 返回 false,compareTo 方法也应该主动抛出一个空指针异常 NullPointerException。

 

由此可得结论:若是A类实现了Compareble接口,并且重写了compareTo()方法

        ①:当你在使用Collections/Arrays的sort对该A的对象集合进行排序时,它会按照compareTo()方法中定义的那样进行排序

        ②:当你使用会自动排序的容器(TreeSet、TreeMap)来存A的对象时,它也会按照compareTo()方法中定义的那样进行排序

        ③:这个只是简单的根据年龄进行比较,在一些场景下可以写的更丰富,比如在年龄相等的情况下根据其他的东西进行排序等

 

class Man implements Comparable<Man> {

private Integer age;

 

public Integer getAge() {

return age;

}

 

public void setAge(Integer age) {

this.age = age;

}

 

public Man(Integer age) {

this.age = age;

}

 

@Override

public int compareTo(Man o) {

return age - o.age;

}

 

@Override

public String toString() {

return "Man{" +

"age=" + age +

'}';

}

}

 

 

Man[] mans = new Man[]{

new Man(3),

new Man(1),

new Man(2),

new Man(6),

new Man(5),

new Man(4)

};

 

System.out.println(Arrays.toString(mans)); // [Man{age=3}, Man{age=1}, Man{age=2}, Man{age=6}, Man{age=5}, Man{age=4}]

Arrays.sort(mans);

System.out.println(Arrays.toString(mans)); // [Man{age=1}, Man{age=2}, Man{age=3}, Man{age=4}, Man{age=5}, Man{age=6}]

 

Comparator

 

 

  相关解决方案