你如何在地图中改变元素

你如何在Map中混洗元素,我正在寻找类似于Collections.shuffle方法的东西。

Map并不像List那样实际排序,这意味着您无法通过索引访问Map项。 因此,洗牌一般没有意义。 但你能做的就是这个(我省略了这个例子的generics):

 Map map = new HashMap(); // [...] fill the map List keys = new ArrayList(map.keySet()); Collections.shuffle(keys); for (Object o : keys) { // Access keys/values in a random order map.get(o); } 

由于HashMap不会在其键中保留任何顺序(既不自然也不插入),因此没有必要对HashMap的键进行随机排列。 如果我们讨论的是LinkedHashMap,那么问题就有意义了,它维护了插入顺序。 在这种情况下,您可以创建一个随机插入键的新LinkedHashMap。

然后,假设map是你的源映射(LinkedHashMap),这里是生成一个名为shuffleMap的新映射(LinkedHashMap)的代码,其中的密钥被洗牌。

  List list = new ArrayList<>(map.keySet()); Collections.shuffle(list); Map shuffleMap = new LinkedHashMap<>(); list.forEach(k->shuffleMap.put(k, map.get(k)));