Java比较器Comparable接口

Comparable接口中唯一的方法compareTo

compareTo方法不但允许进行简单的等同性比较,而且允许执行顺序比较,除此之外,它与Object的equals方法具有相似的特征,它还是个泛型。类实现了Comparable接口,就表明它具有内在的排序关系。

import java.util.Iterator;
import java.util.TreeSet;
class Student implements Comparable {
    private String name;
    private float score;
    public Student(String name, float score) {
        this.name = name;
        this.score = score;
    }
    @Override
    public String toString() {
        return String.valueOf(this.name + ": " +this.score);
    }
    @Override
    public int compareTo(Student o) {
        if(this.score > o.score) {
            return -1;//从高分向低分排序
        } else if (this.score < o.score) {
            return 1;
        } else {
            return 0;
        }
    }
}
public class ComparableDemo {
    public static void main(String[] args) {
        TreeSet set = new TreeSet();
        set.add(new Student("zhangsan", 79));
        set.add(new Student("lisi", 95));
        set.add(new Student("wangwu", 87));
        for(Iterator iter = set.iterator(); iter.hasNext();) {
            System.out.println(iter.next());
        }
    }
}

打印结果:
lisi: 95.0
wangwu: 87.0
zhangsan: 79.0

什么情况下考虑实现Comparable

  1. 自定义类要在加入list容器中后能够排序,可以实现Comparable接口。
  2. 在用Collections类的sort方法排序时若不指定Comparator,那就以自然顺序排序,所谓自然顺序就是实现Comparable接口设定的排序方式。
  3. 如果正在编写一个值类,它具有非常明显的内在排序关系,比如按字母顺序、按数值顺序或者按年代顺序,那么就应该考虑实现这个接口。事实上Java平台类库中的所有值类都实现了Comparable接口。

你可能感兴趣的:(总结)