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

发布于 2024-12-02 00:58:36 字数 179 浏览 0 评论 0原文

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

1 10 13 2 26 29

我希望它看起来像这样:

29 26 13 10 2 1

有什么想法吗?

How can I sort HashMap keys by their numerical value? Currently, in the natural ordering it looks like this:

1 10 13 2 26 29

I want it to look like this:

29 26 13 10 2 1

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

愛上了 2024-12-09 00:58:36

HashMap 无法排序。如果您需要排序键,请查看 树图。为了获得所需的反向排序,您必须提供自定义 比较器

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

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

A HashMap cannot be sorted. If you require sorted keys, take a look at the TreeMap. In order to get the reversed ordering you want, you would have to provide a custom Comparator:

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

Edit I just stumbled across Collections.reverseOrder() which does just what you want: It gives you a Comparator that reverses the natural ordering of objects that implement Comparable. This saves you the hassle of writing a comparator yourself.

待天淡蓝洁白时 2024-12-09 00:58:36

您可以使用 TreeMap ,然后调用 <其上的 href="http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html#descendingMap()" rel="noreferrer">descendingMap()基本上返回一个相反的地图键的排序

You can use a TreeMap and then call descendingMap() on it which basically returns a map with the reverse ordering of the keys

追我者格杀勿论 2024-12-09 00:58:36

HashMap 不会对任何内容进行排序。如果您想保留,请使用 TreeMap键已排序。

HashMap doesn't sort anything. Use a TreeMap instead if you want to keep the keys sorted.

近箐 2024-12-09 00:58:36

您可以将 TreeMap 与构造函数一起使用,该构造函数允许您指定一个比较器

You could use TreeMap with the constructor that lets you specify a Comparator.

宛菡 2024-12-09 00:58:36

尝试下面的代码,它工作正常,并且根据顺序标志,它将升序或降序排序。

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

}

Try below code it works fine and based on order flag it will sort ascending or descending.

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

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文