Java比较器Comparator接口

一个专用的比较器Comparator

Comparator是一个专用的比较器,当一个不支持自比较或者自比较函数不能满足要求时,可写一个比较器来完成两个对象之间大小的比较。Comparator体现了一种策略模式,即不改变对象自身,而用一个策略对象来改变它的行为。

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

class Student {
    private String name;
    private float score;

    public Student(String name, float score) {
        this.name = name;
        this.score = score;
    }
    public String getName() {
        return name;
    }
    public float getScore() {
        return score;
    }

    @Override
    public String toString() {
        return String.valueOf(this.name + ": " + this.score);
    }
}
class StudentComparator implements Comparator {
    @Override
    public int compare(Student o1, Student o2) {
        if (o2.getScore() - o1.getScore() > 0) {
            return 1;
        } else if (o2.getScore() - o1.getScore() < 0) {
            return -1;
        } else {
            return 0;
        }
    }
}
public class ComparableDemo {

    public static void main(String[] args) {
        TreeSet set = new TreeSet(new StudentComparator());
        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

说明

Comparator接口有两个方法,一个是compare方法,另外一个是equals()方法,但是大多数情况下,在一个类实现Comparator接口时,是不需要重写equals方法的,这是因为这个类继承了Object的equals方法。

Comparable接口和Comparator接口的区别

  1. 它们两个都是用来实现集合中元素的比较、排序的。
  2. Comparable是在集合内部定义的方法实现的排序,位于java.util包下
  3. Comparator是在集合外部实现的排序,位于java.lang包下。
  4. 在一个又一个类设计完成后,或许我们最初没有考虑到类的比较问题,没有对Comparable接口进行实现,没有关系,我们可以通过Comparator接口来完成,并且无需改变之前完成的类的构建。

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