• 目录

Comparator和Comparable

阅读量: 248 编辑

Comparator和Comparable

都可以实现排序。

Comparable 是排序接口

若一个类实现了Comparable接口,就意味着 该类支持排序 。

实现了Comparable接口的类的对象的列表或数组可以通过Collections.sortArrays.sort进行自动排序。

实现此接口的对象可以用作有序映射(TreeMap)中的键或有序集合(TreeSet)中的集合,无需指定比较器。

接口中通过x.compareTo(y)来比较x和y的大小。若返回负数,则x比y小;返回零,则x等于y;返回正数,则x大于y。

public class Person implements Comparable<Person>{
	int age;
    
	@Override
    public int compareTo(Person p){
        return this.age-p.getAge();
    }
    
}

Comparator 是比较器接口

我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口)。

那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口即可。

也就是说,我们可以通过实现Comparator来新建一个比较器,然后通过这个比较器对类进行排序。

//创建比较器
public class PersonCompartor implements Comparator<Person>{
    @Override
    public int compare(Person p1, Person p1){
        return p1.getAge() - p1.getAge();
    }
}

// 使用比较器
Arrays.sort(peopleArray, new PersonCompartor());

Comparable相当于“内部比较器”(类要实现这个接口)。

而Comparator相当于“外部比较器”(通过单独的类实现比较)。

  • 目录