您的位置:首页 > 其它

Comparable和Comparator的区别和联系

2017-05-17 18:36 423 查看

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是一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  equals compare comparator