java集合从大到小输出_java中集合Map中的键如果是int型,如何使它对应的值按照从大到小的顺序输出呢?...

在Java中,若Map的键是int类型,可以通过将Map转换为TreeMap来实现键值对的逆序输出。具体操作是创建一个TreeMap并传入原Map,然后使用`descendingKeySet()`方法获取反向迭代器,遍历即可。如果键是Integer,可能需要自定义Comparator,但不需要重写`equals`和`hashcode`方法。
摘要由CSDN通过智能技术生成

java中集合Map中的键如果是int型,如何使它对应的值按照从大到小的顺序输出呢?

关注:60  答案:2  mip版

解决时间 2021-01-15 18:22

e6cb1a03ad541b3098697807b7bf1798.png

提问者〖舉燈向ηáη〗

2021-01-14 23:50

最好举个例子,详细说一下……

如果用TreeMap实现排序,还要重写Comparator,equals,hashcode方法么??

最佳答案

e6cb1a03ad541b3098697807b7bf1798.png

二级知识专家咱再堅強也是壹菇涼

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了

全部回答

e6cb1a03ad541b3098697807b7bf1798.png

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

我要举报

如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

→点此我要举报以上信息!←

推荐资讯

大家都在看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值