java中集合Map中的键如果是int型,如何使它对应的值按照从大到小的顺序输出呢?
关注:60 答案:2 mip版
解决时间 2021-01-15 18:22
提问者〖舉燈向ηáη〗
2021-01-14 23:50
最好举个例子,详细说一下……
如果用TreeMap实现排序,还要重写Comparator,equals,hashcode方法么??
最佳答案
二级知识专家咱再堅強也是壹菇涼
2021-01-15 01:11
最简单的办法是把这个map放到一个TreeMap里面,TreeMap遍历的话直接是排好序的。
假设给你的Map是input,
TreeMap tm = new TreeMap(input);
//descendingKeySet代表反序
Iterator i=tm.descendingKeySet().iterator();
然后用i来遍历就是按从大到小的顺序遍历key了
Integer的话自己就实现Comparator,equals和hashcode了
全部回答
1楼众里寻春风
2021-01-15 02:17
java.util.treemap 放入其中的value,自动按key进行排序, 默认的排序规则按ascii码排序,如果是key是英文和数字不会有问题,如果中文则会出现问题,需要自己写排序规则。
比较器需要实现java.text.collator类,例如:
package cn.tjopen.mediaman.util;
import java.text.collationkey;
import java.text.collator;
public class collatorcomparator extends collator {
private collator collator = collator.getinstance();
private int sort=1;
@override
public int compare(string arg0, string arg1) {
collationkey key1 = collator.getcollationkey(arg0);
collationkey key2 = collator.getcollationkey(arg1);
return sort*key1.compareto(key2);
}
public void setsort(int i){
if(i>0){
sort=1;
}else if(i<0){
sort=-1;
}
}
@override
public collationkey getcollationkey(string arg0) {
// todo auto-generated method stub
return null;
}
@override
public int hashcode() {
// todo auto-generated method stub
return 0;
}
}
比较器的使用:
int sort = 1;//>0正序<0倒叙
collatorcomparator comparator = new collatorcomparator();
comparator.setsort(sort);
map map = new treemap(comparator);
然后在把要排序的字段作为key,相应的信息作为对应的value,即可实现排序
注意:key值不能重复,如果排序字段有重复,则需要进行处理。
例如:方法一:在向map中存放数据时,先判断要放的key是否已存在,如果存在在当前值后面加一区分标记
方法二:如果信息中有不可能重复的字段,在排序字段后面加上这个不重复的字段值,把这个组合当做key
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
→点此我要举报以上信息!←
推荐资讯
大家都在看