我的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
但上述方法听起来效率不高。
请建议。
谢谢
答案 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));
}