4个回答
展开全部
我认为是比较器,使用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());
}
}
例如要对一篇文章中单词统计排序,用到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());
}
}
展开全部
你要排序的对象实现了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;
}
}
});
已集合排序为例,写个匿名的如下:
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;
}
}
});
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那得看你需要对什么东西进行排序了,想数字,字母子类的可以用自然排序,要是想按对象中的某系字段对对象进行排序,这时可以考虑一下比较器了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你想干嘛?比较器应该也是实现comparable接口。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询