我想按值排序HashMap。 我正在使用下面的代码在Java中对LinkedHashMap排序
public static Map<String, Float> sortByValue(Map<String, Float> unsorted_map){
Map<String, Float> sorted_map = new LinkedHashMap<String, Float>();
try{
// 1. Convert Map to List of Map
List<Map.Entry<String, Float>> list = new LinkedList<Map.Entry<String, Float>>(unsorted_map.entrySet());
// 2. Sort list with Collections.sort(), provide a custom Comparator
Collections.sort(list, new Comparator<Map.Entry<String, Float>>() {
public int compare(Map.Entry<String, Float> o1,
Map.Entry<String, Float> o2) {
return (o1.getValue()).compareTo(o2.getValue());
}
});
// 3. Loop the sorted list and put it into a new insertion order Map LinkedHashMap
for (Map.Entry<String, Float> entry : list) {
sorted_map.put(entry.getKey(), entry.getValue());
}
}
catch(Exception e){
e.printStackTrace();
}
return sorted_map;
}
但输出是错误的。 特别是,值以降序开始,然后在0.0值之后,它们按升序排列(如第二个数据列所示)。
---> 1985 0.54660827
---> 2002 0.45290402
---> 1993 0.40605184
---> 2015 0.3591997
---> 2000 0.34358233
---> 1980 0.2811128
---> 2008 0.24987808
---> 1990 0.23426071
---> 1983 0.23426071
---> 1986 0.21864335
---> 1977 0.18740855
---> 1992 0.1717912
---> 2009 0.14055647
---> 2006 0.12493904
---> 2011 0.031234872
---> 2001 0.015617436
---> 1975 0.0
---> 1997 0.031234723
---> 2004 0.046852008
---> 1988 0.062469445
---> 2013 0.07808688
---> 1978 0.07808688
---> 2005 0.1093216
---> 1981 0.14055632
---> 1976 0.14055632
---> 2014 0.14055632
---> 1999 0.15617377
---> 1994 0.20302577
---> 1987 0.20302577
---> 2010 0.2186432
---> 1991 0.24987794
---> 1989 0.24987794
---> 1996 0.28111264
---> 2012 0.28111264
---> 2003 0.29673007
---> 1998 0.29673007
---> 2007 0.31234753
---> 1984 0.3904344
---> 1982 0.42166913
---> 1979 0.5309907
---> 1995 0.73401666
有人可以帮我吗?
在此先感谢!
为什么不利用这种种本身一个TreeMap? – puhlen
@ puhlen因为它按键排序,而不是按值排序。 –
这个实现对我来说看起来是正确的。实际上,我真的怀疑你用来打印地图的代码,或者在你调用这个方法时不想分配排序后的地图。 –