2017-08-02 21 views
0

我需要一個非常快速的機制,通過Hashtable中的條目以隨機順序進行迭代。表中的條目數通常在10左右,並且永遠不會超過20個。目前,我正在執行以下代碼,通過挑選16個隨機唯一的雙精度並對其進行排序來隨機化鍵的順序,但我正在思考它不是最有效的解決方案:需要一個非常快速的Java機制,以隨機順序通過Hashtable中的條目進行迭代

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迭代的鍵陣列到尺寸-2和交換基元i與隨機元素(從i + 1到大小-1 )。至少是線性的。期待意見!

回答

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() 
} 
+0

集合有一個shuffle方法嗎?爲什麼我不知道這件事? *咧嘴*感謝您的快速響應。這應該被標記爲我的問題之一 –