您的位置:首页 > 其它

Comparable 和 Comparator的区别

2016-08-01 17:46 441 查看
在使用集合收集对象之后,如果相对对象进行排序,我们可以使用java.util.Collections中的sort()方法,因为必须有索引才能进行排序,所以Collections的sort()方法就受List操作对象。使用sort()方法只能按照它提供的排序方法对对象进行排序,如果想自己定义排序规则,可以操作java.util.Comparable中的compareTo()方法,或者java.util.Comparator接口中的compara()方法。

区别:

Comparable的compareTo()方法,必须在比较的对象内部定义重写该方法,比如String类本身有操作Comparable,进行下列排序

List words = Arrays.asList("B", "X", "A");
Collections.sort(words);


它会得到结果:A B X

如果此时需要进行逆序排序,则需要在String类内部重写compareTo()方法,所以使用compareTo()在一些情况下并不方便

Comparator接口中的compara()方法则没有该要求,它可以在另一个类中重写compara()方法,最后调用该类

List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new valueSort());
for (int i = 0; i < list.size(); i++)
System.out.print(list.get(i).getKey());

class valueSort implements Comparator<Map.Entry<String, Integer>> {

@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
if ((o1.getValue() - o2.getValue()) > 0)
return -1;
else if ((o1.getValue() - o2.getValue() == 0)
&& (o1.getKey().charAt(0) - o2.getKey().charAt(0) > 0))
return -1;
return 1;
}
}

在类valueSort中重写了compare()方法,然后使用Collections.sort(list, new valueSort())调用该类,对list进行排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: