【发布时间】:2011-07-10 07:07:24
【问题描述】:
亲爱的, 我有一个哈希映射,其中保存了值:歌手(字符串)和流行度(整数)。
现在,我想根据受欢迎程度订购这个哈希图。
在java中怎么做?
【问题讨论】:
亲爱的, 我有一个哈希映射,其中保存了值:歌手(字符串)和流行度(整数)。
现在,我想根据受欢迎程度订购这个哈希图。
在java中怎么做?
【问题讨论】:
我假设您将歌手存储为键,并将(歌手的)流行度存储为值。 HashMap 是无序的,TreeMap 是按键排序的,而不是按值排序的,所以没用。
如果您需要按受欢迎程度对歌手排序,则使用地图中的所有歌手建立一个列表,然后使用比较两位歌手的受欢迎程度的比较器对该列表进行排序:
List<String> singers = new ArrayList<String>(map.keySet());
Collections.sort(singers, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
Integer popularity1 = map.get(s1);
Integer popularity2 = map.get(s2);
return popularity1.compareTo(popularity2);
}
});
【讨论】:
HashMap 可以(按设计)不被订购。如果您需要有序地图,请使用TreeMap。
【讨论】:
TreeMap 不会帮助您按值对地图进行排序。
您无法控制 HashMap 元素的顺序。创建一个新的TreeMap<Integer,List<String>> 并将您的数据复制到其中。使用List<String> 涵盖您有重复 int 值的情况。
【讨论】: