需要一个非常快速的Java机制,通过Hashtable中的条目以随机顺序进行迭代

Ric*_*and 0 java random

我需要一种非常快速的机制,通过Hashtable中的条目以随机顺序进行迭代.表中的条目数通常约为10,永远不会超过20.目前我正在执行以下代码,通过选择16个随机,独特的双打并对其进行排序来随机化键的顺序,但我正在思考它不是最有效的解决方案:

    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 );
        ..................
Run Code Online (Sandbox Code Playgroud)

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

Lou*_*man 5

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()
}
Run Code Online (Sandbox Code Playgroud)