按数值降序对Hashmap键进行排序

时间:2011-08-29 08:22:37

标签: java sorting hashmap

如何按其数值对HashMap个键进行排序?目前,在自然顺序中它看起来像这样:

1 10 13 2 26 29

我希望它看起来像这样:

29 26 13 10 2 1

有什么想法吗?

5 个答案:

答案 0 :(得分:10)

无法对HashMap进行排序。如果您需要排序键,请查看TreeMap。为了获得您想要的反向排序,您必须提供自定义Comparator

class ReversedOrdering implements Comparator<Integer> {
    public int compare(Integer lhs, Integer rhs) {
        // compare reversed
        return rhs.compareTo(lhs);
    }
}

修改我偶然发现了Collections.reverseOrder(),这正是您想要的:它为您提供了一个Comparator,可以反转实现Comparable的对象的自然顺序。这样可以省去自己编写比较器的麻烦。

答案 1 :(得分:6)

您可以使用TreeMap,然后在其上调用descendingMap(),它基本上会返回一个带有反向排序键的地图

答案 2 :(得分:0)

HashMap没有排序。如果您希望对密钥进行排序,请使用TreeMap

答案 3 :(得分:0)

您可以将TreeMap与允许您指定Comparator的构造函数一起使用。

答案 4 :(得分:0)

尝试以下代码,它工作正常,并根据订单标记,它将按升序或降序排序。

import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;

/**
 * @author Rais.Alam
 * @date Dec 12, 2012
 */
public class HelloWorld
{
    public static void main(String[] args)
    {
        final boolean order = true;
        try
        {

            Map<Integer, String> map = new TreeMap<Integer, String>(
                    new Comparator<Integer>()
                    {

                        @Override
                        public int compare(Integer first, Integer second)
                        {

                            if (order)
                            {

                                return second.compareTo(first);
                            }
                            else
                            {
                                return first.compareTo(second);

                            }
                        }
                    });

            map.put(2, "v");
            map.put(3, "h");
            map.put(4, "e");
            map.put(1, "a");

            System.out.println(map);

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

}