你如何在地图中改变元素

时间:2011-05-16 12:25:59

标签: java

如何在地图中随机播放元素,我正在寻找类似于Collections.shuffle方法的内容。

2 个答案:

答案 0 :(得分:32)

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

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);
}

答案 1 :(得分:6)

由于HashMap不会在其键中保留任何顺序(既不自然也不插入),因此无需对HashMap的键进行随机播放。如果我们讨论的是LinkedHashMap,它会维持插入顺序,这是有道理的。在这种情况下,您可以创建一个随机插入密钥的新LinkedHashMap。

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

    List<Integer> list = new ArrayList<>(map.keySet());
    Collections.shuffle(list);

    Map<Integer, String> shuffleMap = new LinkedHashMap<>();
    list.forEach(k->shuffleMap.put(k, map.get(k)));