java - 需要一个非常快速的 Java 机制来以随机顺序迭代哈希表中的条目

标签 java random

我需要一种非常快速的机制来以随机顺序迭代哈希表中的条目。表中的条目数通常约为 10 个,永远不会超过 20 个。目前,我正在执行以下代码,通过选择 16 个随机、唯一的 double 并对其进行排序来随机化键的顺序,但我在想这不是最有效的解决方案:

    TreeMap<Double, String> seeds = new TreeMap<Double, String>();

    // These go in random order
    Enumeration<String> keys = content.keys();
    while (keys.hasMoreElements()) {
        String key = keys.nextElement();
        Double seedKey = new Double(Math.random());
        while (seeds.get(seedKey) != null)
            seedKey = new Double(Math.random());
        seeds.put(seedKey, key);
    }
    // Now enumerate through the seeds
    Set<Double> keys2 = seeds.keySet();
    for (Double d : keys2) {
        String key = seeds.get(d);
        String value = content.get( key );
        ..................

我得到的一个建议是从 0 到 size-2 迭代键数组,并将元素 i 与随机元素交换(从 i+1 到 size-1)。至少是线性的。期待您的建议!

最佳答案

List<Map.Entry<Key, Value>> entries = new ArrayList<>(map.entrySet());
Collections.shuffle(entries);
for (Map.Entry<Key, Value> entry : entries) {
  // do whatever with entry.getKey(), entry.getValue()
}

关于java - 需要一个非常快速的 Java 机制来以随机顺序迭代哈希表中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45470212/

相关文章:

python - 选择具有重量的随机项目

c++ - 生成随机位的最快方法

java - TestNG @BeforeClass 初始化代码在 Test 之前未运行

algorithm - 如何按一定比例随机选择

python - Pandas:使用范围内的随机整数在 df 中创建新列

java - 重写接口(interface)中的其他场景

java - 随机字符和随机颜色生成器

java - super.clone() 查询?

java - 以 "is"为前缀的 boolean 属性名称是否仍然是有效的 Java Bean?

java - Spinner setSelection() 不起作用