你如何在地图中改变元素
你如何在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)));