按值排序哈希表

如果我有一个Hashtable,我想按值排序,即:整数按降序排列。 我怎么能这样做,并能够打印所有的键值对?

转移为列表并对其进行排序:

  public static void sortValue(Hashtable t){ //Transfer as List and sort it ArrayList> l = new ArrayList(t.entrySet()); Collections.sort(l, new Comparator>(){ public int compare(Map.Entry o1, Map.Entry o2) { return o1.getValue().compareTo(o2.getValue()); }}); System.out.println(l); } 

哈希表没有排序。 因此,您需要复制哈希表的密钥集,对其进行排序,并通过迭代排序列表中的键来从哈希表中检索值。

或者使用排序的哈希表替换,例如TreeMap; 这将避免必须制作密钥集的副本。

如果你的意思是“我该怎么做”,那么答案就是将它们全部添加到TreeMap然后遍历它,或者将它们全部添加到ArrayList然后对它进行排序。

如果你的意思是“我如何有效地做到这一点”,我相信答案是,不可能比上面更有效率。

这个问题可能有更多信息。

SortedMap允许您指定比较器,或者如果不使用元素的自然排序,其中逆对于整数是正常的。 以下按降序排序打印:

  SortedMap map = new TreeMap(new Comparator() { public int compare(Integer o1, Integer o2) { return o2.compareTo(o1); } }); map.put(2, "value2"); map.put(3, "value3"); map.put(1, "value1"); for (Map.Entry nextEntry : map.entrySet()) { System.out.println(nextEntry.getKey() + " : " + nextEntry.getValue()); } 

请参阅以下链接

按值排序HashMap

要么

如何根据树的值对树图进行排序?

两者都是基于值按升序或降序对哈希映射进行排序的实现

如果你不理解上面的代码,这是一种低效的方法。

 public static void sortHashtable1 (Hashtable  t,int count) { double a[]=new double[count]; int i=0; for (int ss : t.keySet()) { a[i]=t.get(ss); i++; } Arrays.sort(a); outer:for(int j=a.length-1;j>=0;j--) { for(int ss : t.keySet()) if(t.get(ss)==a[j]) { System.out.println(ss+" "+a[j]); a[j]=-1; t.put(ss, -1.0); continue outer; } } }