java HashMap排序<;字符串,整数>。如何分类?
可能重复:java HashMap排序<;字符串,整数>。如何分类?,java,sorting,hashmap,Java,Sorting,Hashmap,可能重复: 在我的项目中,我采用了这样的HashMap HashMap degree=newhashmap() 假设我有: degree.put("a",5); degree.put("b",2); degree.put("c",4); degree.put("d",2); degree.put("e",3); degree.put("f",5); 现在我必须根据给定的整数值对这个列表进行排序 排序的HashMap应为: {a=5,f=5,c=4,e=4,b=4,d=2} 我怎样才能做到这一
在我的项目中,我采用了这样的HashMap HashMap degree=newhashmap()强> 假设我有:
degree.put("a",5);
degree.put("b",2);
degree.put("c",4);
degree.put("d",2);
degree.put("e",3);
degree.put("f",5);
现在我必须根据给定的整数值对这个列表进行排序
排序的HashMap应为:
{a=5,f=5,c=4,e=4,b=4,d=2}
我怎样才能做到这一点?A
HashMap
是一个无序的集合。它没有排序顺序。即使是TreeMap
也将按键排序,而不是按值排序
如果要按值的排序顺序准备排序列表,则必须创建一个适当的对象,例如
ArrayList
,在HashMap
上迭代并插入所有条目,然后使用排序函数调用Collections.sort
,HashMap不是最好的方法
我建议在排序时查看TreeMap
。您可以将比较器设置为比较值,而不是键,如此答案中所示:
您可以从原始hashmap构建一个新的hashmap(占用x2内存,效率非常低)。因此,您需要使用hashmap的.get()和.set()方法将近n*n(最坏情况)次,其中n是元素数;
ArrayList<Integer> sortedHashMap=new ArrayList<Integer>();
for("your Object" m : degree.values())
{
sortedHashMap.add(m);
}
collections.sort(sortedHashMap);
对于(“您的对象”m:degree.values())
{
添加(m);
}
收集.分类(分类地图);
因此,您可以将hashMap打印为已排序的hashMap 在我看来,根据整数值排序的原始HashMap实际上类似于{a=5,f=5,c=4,e=3,b=2,d=2}。检查这个,如果它正在查看值,最好不要在树映射上调用.get()。