java - 如何在hashmap中通过hashcode对随机值进行排序

标签 java hashmap hashcode

我有一个简单的类,它填充一个简单的 HashMap ,我想通过哈希码对值进行排序,该怎么做?

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

    public class Ch11Ex18 {
        public static void main(String[] args) {
            Random rand = new Random(47);
            Map<Integer,Integer> m = new HashMap<Integer,Integer>();
            for(int i = 0; i < 10000; i++) {
              // Produce a number between 0 and 20:
              int r = rand.nextInt(20);
              Integer freq = m.get(r);
              m.put(r, freq == null ? 1 : freq + 1);

            }
            System.out.println(m);
          }
    }

最佳答案

你不:HashMap本质上是无序的。

您可以使用TreeMap使用自定义比较器,但是您应该意识到,如果您使用具有相同哈希代码的不相等对象,则只有其中一个最终会出现在映射中......即使如此,这也会按键进行排序 而不是值。

您可以创建一个 ArrayList<Integer>包含值的副本,并对它进行排序 - 但这样你就没有键了。

您可以创建一个 ArrayList<Map.Entry<Integer, Integer>>包含条目的副本,然后对其进行排序...但实际上,这有什么意义?

从根本上来说,这是一件奇怪的事情 - 基本上,哈希码不应该像这样使用。它们不是唯一的,不应该被视为随机性的来源,等等。无论这里有什么大局,肯定会有更好的方法。

关于java - 如何在hashmap中通过hashcode对随机值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9037823/

相关文章:

java - ArrayList Scanner 输入帮助 Java

java - 多用户数据库,如何识别客户端何时断开连接

java - 使用 Stream 展平嵌套 Hashmap

java - SharedPreferences get 总是返回默认值而不是实际值

Java8 Hashmap 在返回常量哈希码的情况下重新哈希

java - Object类中的hashCode()方法是如何实现的?

java - 重写 hashCode() 不起作用

java - 如何显示任何菜单 fragment (setVisible :ON) while i press button login

java - 为什么ZonedDateTime和Calendar在2050年的小时数上不一致?

java - 双哈希常数 5?