Java比较器Comparator接口

来源:互联网 发布:解析json为格式化 编辑:程序博客网 时间:2024/05/16 17:17

一个专用的比较器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<Student> {    @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<Student> set = new TreeSet<Student>(new StudentComparator());        set.add(new Student("zhangsan", 79));        set.add(new Student("lisi", 95));        set.add(new Student("wangwu", 87));        for (Iterator<Student> 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接口来完成,并且无需改变之前完成的类的构建。
原创粉丝点击