Java 以随机方式重新排列贴图

Java 以随机方式重新排列贴图,java,Java,我有一个SortedMap包含键:ID和值:Name 现在我想以随机的方式重新排列这个映射的元素&将它们存储在单独的映射中 // 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 s

我有一个
SortedMap
包含键:ID值:Name

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

// 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
//从SortedMap获取一个随机条目。
字符串[]keyArr=student.keySet().toArray();
字符串key=keyArr[new Random().nextInt(keyArr.length)];
//使用单独的列表存储已选择的键,以便不会重新选择
但上述方法听起来并不十分有效

请建议


谢谢你

我不确定我是否明白你的问题,但你应该可以做类似的事情

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));
}
Map result=newlinkedhashmap();
List keys=newarraylist(map.keySet());
收藏。洗牌(键);
用于(对象o:关键点){
//以随机顺序访问键/值
结果.put(o,map.get(o));
}

我不确定我是否明白你的问题,但你应该可以做类似的事情

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));
}
Map result=newlinkedhashmap();
List keys=newarraylist(map.keySet());
收藏。洗牌(键);
用于(对象o:关键点){
//以随机顺序访问键/值
结果.put(o,map.get(o));
}

您需要将
入口集
复制到
列表
中,然后将其洗牌。这将以随机顺序提供元素

现在,您可以将这些元素推送到一个新的
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());
}
final Map m=new TreeMap();
m、 付诸表决(“A”,1);
m、 付诸表决(“B”,1);
m、 付诸表决(“C”,1);
m、 付诸表决(“D”,1);
m、 付诸表决(“E”,1);
m、 付诸表决(“F”,1);
m、 put(“G”,1);
最终列表e=新的ArrayList(m.entrySet());
收藏。洗牌(e);
最终映射r=新LinkedHashMap();
用于(地图条目:e){
r、 put(entry.getKey(),entry.getValue());
}

您需要将
入口集
复制到
列表
中,然后将其洗牌。这将以随机顺序提供元素

现在,您可以将这些元素推送到一个新的
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());
}
final Map m=new TreeMap();
m、 付诸表决(“A”,1);
m、 付诸表决(“B”,1);
m、 付诸表决(“C”,1);
m、 付诸表决(“D”,1);
m、 付诸表决(“E”,1);
m、 付诸表决(“F”,1);
m、 put(“G”,1);
最终列表e=新的ArrayList(m.entrySet());
收藏。洗牌(e);
最终映射r=新LinkedHashMap();
用于(地图条目:e){
r、 put(entry.getKey(),entry.getValue());
}

您必须使用
LinkedHashMap
,因为您会发现
HashMap
将对元素重新排序。另外,使用
entrySet
更有效,因为您不需要为每个元素调用
get
。在编写注释时,我将
HashMap
更改为
LinkedHashMap
。您必须使用
LinkedHashMap
,因为您会发现
HashMap
将对元素重新排序。另外,使用
entrySet
更有效,因为您不需要为每个元素调用
get
。在编写注释时,我将
HashMap
更改为
LinkedHashMap