以随机方式重新排列地图

时间:2014-06-29 17:25:44

标签: java

我的SortedMap<String, String>包含键:ID &amp;的值:名称

现在我想以随机的方式重新排列这个地图的元素。将它们存储在单独的地图中。

// Get a random entry from the SortedMap.
String[] keyArr = student.keySet().toArray();
String key = keyArr[new Random().nextInt(keyArr.length)];

// Use a separate List<String> to store which key has been selected, so that they are not re-selected

但上述方法听起来效率不高。

请建议。

谢谢

2 个答案:

答案 0 :(得分:4)

您需要将entrySet复制到List并将其随机播放。这将以随机顺序为您提供元素。

现在您可以将这些元素推送到新的LinkedHashMap - 以保留随机顺序。如下所示:

final Map<String, Object> m = new TreeMap<>();
m.put("A", 1);
m.put("B", 1);
m.put("C", 1);
m.put("D", 1);
m.put("E", 1);
m.put("F", 1);
m.put("G", 1);
final List<Map.Entry<String, Object>> e = new ArrayList<>(m.entrySet());
Collections.shuffle(e);
final Map<String, Object> r = new LinkedHashMap<>();
for (Map.Entry<String, Object> entry : e) {
    r.put(entry.getKey(), entry.getValue());
}

答案 1 :(得分:1)

我不确定我是否提出了您的问题,但您应该可以做类似的事情

Map<String, String> result = new LinkedHashMap<>();
List keys = new ArrayList(map.keySet());
Collections.shuffle(keys);
for (Object o : keys) {
    // Access keys/values in a random order
    result.put(o, map.get(o));
}