java中如果既有自然排序又有比较器,此时会优先选择哪个用

自然排序就是实现了comparable接口... 自然排序就是实现了comparable接口 展开
 我来答
备战考级
推荐于2016-11-17 · TA获得超过167个赞
知道答主
回答量:189
采纳率:0%
帮助的人:138万
展开全部
我认为是比较器,使用comparator比较灵活
例如要对一篇文章中单词统计排序,用到HashMap中的值排序,则如下所示:
class AlComparator implements Comparator{
public int compare(Object o1, Object o2){
Map.Entry<String, Integer> m1 = (Map.Entry<String, Integer>)o1;
Map.Entry<String, Integer> m2 = (Map.Entry<String, Integer>)o2;
return (m1.getValue() < m2.getValue() ? 1:(m1.getValue() > m2.getValue() ? -1:0));
}
}
HashMap<String, Integer> m = new HashMap<String, Integer>();
m.put("heh", 2);
m.put("yeyey", 28);
m.put("hhh1", 11);
m.put("hhh2", 13);
m.put("hhh3", 9);
List<Map.Entry<String, Integer>> l = new ArrayList<Map.Entry<String, Integer>>();
l.addAll(m.entrySet());
// Collections.sort(l, Collections.reverseOrder());
Collections.sort(l, new AlComparator());
Iterator<Map.Entry<String, Integer>> it = l.iterator();
while(it.hasNext()){
Map.Entry<String, Integer> map = it.next();
System.out.println(map.getKey()+" "+map.getValue());
}
}
话题前哨
2010-07-06 · TA获得超过208个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:95.5万
展开全部
你要排序的对象实现了comparable接口,自然会按自然顺序排序,如果你想要用比较器,得有个Comparator的实现类,要排序的时候将该实现类的对象传递过去,就按比较器规则排序。
已集合排序为例,写个匿名的如下:
Collections.sort(personList,new Comparator(){
@Override
public int compare(Object o1, Object o2) {
Person p1= (Person) o1;
Person p2= (Person) o1;
if(p1.age>p2.age){
return 1;
}
if (p1.age==p2.age){
return 0;
} else {
return -1;
}
}

});
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
落雨泪夜
2010-07-06
知道答主
回答量:22
采纳率:0%
帮助的人:27.6万
展开全部
那得看你需要对什么东西进行排序了,想数字,字母子类的可以用自然排序,要是想按对象中的某系字段对对象进行排序,这时可以考虑一下比较器了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zymb1983
2010-07-06 · TA获得超过199个赞
知道小有建树答主
回答量:361
采纳率:0%
帮助的人:124万
展开全部
你想干嘛?比较器应该也是实现comparable接口。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式