【问题标题】:Sort Hashmap keys by numerical value descending order按数值降序对 Hashmap 键进行排序
【发布时间】:2011-11-05 20:45:48
【问题描述】:

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

1 10 13 2 26 29

我希望它看起来像这样:

29 26 13 10 2 1

有什么想法吗?

【问题讨论】:

    标签: java sorting hashmap


    【解决方案1】:

    试试下面的代码,它可以正常工作,根据订单标志,它会升序或降序排序。

    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();
            }
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用TreeMap,然后在其上调用descendingMap(),这基本上会返回一个键的逆序映射

      【讨论】:

        【解决方案3】:

        无法对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 的对象的自然顺序。这样就省去了自己编写比较器的麻烦。

        【讨论】:

        • 我意识到我的密钥不再是数字了。不过感谢您的信息!
        • @Maurice:我添加了一个更简单的解决方案来获得自然排序的反转(键的类型无关紧要:如果实现 Comparable,您可以通过这种方式反转排序) .
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          HashMap 不会对任何内容进行排序。如果要保持键排序,请改用TreeMap

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-09-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多