Java按值排序HashMap

我有这个HashMap:

HashMap m 

它基本上存储任何单词(String)及其频率(整数)。 以下代码按值排序HashMap:

 public static Map sortByValue(Map map) { List<Map.Entry> list = new LinkedList<Map.Entry>(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry>() { public int compare(Map.Entry m1, Map.Entry m2) { return (m2.getValue()).compareTo(m1.getValue()); } }); Map result = new LinkedHashMap(); for (Map.Entry entry : list) { result.put(entry.getKey(), entry.getValue()); } return result; } 

现在情况已经改变,我有这个:

 HashMap; class doc{ integer freq; HashMap; } 

我如何按照与sortByValue相同的方法按值对HashMap进行排序?

你必须创建一个这样的自定义比较器:

 import java.util.Comparator; import java.util.Arrays; public class Test { public static void main(String[] args) { String[] strings = {"Here", "are", "some", "sample", "strings", "to", "be", "sorted"}; Arrays.sort(strings, new Comparator() { public int compare(String s1, String s2) { int c = s2.length() - s1.length(); if (c == 0) c = s1.compareToIgnoreCase(s2); return c; } }); for (String s: strings) System.out.print(s + " "); } } 

@jackturky而不是

 public int compare(String s1, String s2) { int c = s2.length() - s1.length(); if (c == 0) c = s1.compareToIgnoreCase(s2); return c; } 

为什么不写(这当然检查null和空字符串)

 public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); }