我需要一种非常快速的机制来以随机顺序迭代哈希表中的条目。表中的条目数通常约为 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/