Comparable和Comparator的区别和联系

来源:互联网 发布:群p是种什么体验知乎 编辑:程序博客网 时间:2024/06/05 13:07

1 两个接口的定义

public interface Comparator<T> {    int compare(T o1, T o2);    boolean equals(Object obj);//object的}public interface Comparable<T> {  public int compareTo(T o);}

2 区别

<T extends Comparable<? super T>> void java.util.Collections.sort(List<T> list)  <T> void java.util.Collections.sort(List<T> list, Comparator<? super T> c) 

Comparator是比较器,是策略模式,不改变对象自身,而用一个策略对象来改变它的行为。
Comparable规定了一个类的“自然顺序”(nature order)。继承它的类需要实现compareTo 接口。
Collections.sort(list,comparator), Arrays.sort(list, comparator);以及有序的Set(TreeSet)和Map(TreeMap)可以用到Comparator来指定比较器。
如果集合元素实现了Comparable接口,则Collections.sort,Arrays.sort有序的set和map就可以不指定比较器而自动排序。

3 联系

List<Boolean> ll = Arrays.asList(true,false,true,false);ll.sort((x, y)->Boolean.compare(x, y));ll.sort(Boolean::compare);即Comparator<Boolean> c = Boolean::compare;等价于Comparator<Boolean> c = new Comparator<Boolean>() {    @Override    public int compare(Boolean x, Boolean y) {        return Boolean.compare(x, y);    }};

4 其他

Comparable是java.lang下
Comparator是java.util下。
这个跟java.util.Iterator和java.lang.Iteratable是一样的。

原创粉丝点击