按值排序哈希表

时间:2011-03-03 04:48:26

标签: java

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

6 个答案:

答案 0 :(得分:13)

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

    public static void sortValue(Hashtable<?, Integer> t){

       //Transfer as List and sort it
       ArrayList<Map.Entry<?, Integer>> l = new ArrayList(t.entrySet());
       Collections.sort(l, new Comparator<Map.Entry<?, Integer>>(){

         public int compare(Map.Entry<?, Integer> o1, Map.Entry<?, Integer> o2) {
            return o1.getValue().compareTo(o2.getValue());
        }});

       System.out.println(l);
    }

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果您的意思是“我该怎么做”,那么答案就是将所有这些内容添加到TreeMap然后遍历它,或者将所有这些内容添加到ArrayList然后对它进行排序。

如果您的意思是“我如何有效地高效地”,我相信答案是不可能获得比上述效率更高的效率。

This question可能会有更多信息。

答案 3 :(得分:0)

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

    SortedMap<Integer, Object> map = new TreeMap<Integer, Object>(new Comparator<Integer>() {
        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<Integer, Object> nextEntry : map.entrySet()) {
        System.out.println(nextEntry.getKey() + " : " + nextEntry.getValue());
    }

答案 4 :(得分:0)

请参阅以下链接

Sorting HashMap by values

How to sort a treemap based on its values?

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

答案 5 :(得分:0)

如果您不理解上述代码,这是一种效率低下的方法。

public static void sortHashtable1 (Hashtable <Integer,Double> 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;
        }
    }


}