Java - 从hashmap键创建排列

时间:2012-09-26 10:28:57

标签: java hash hashmap

所以我有一个包含键和对象的hashmap。我想知道是否有可能用键创建一些排列。例如,如果我有:

1 - Object1 2 - Object2 3 - Object3 4 - Object4

获得随机订单。所以结果可能是:

3 - Object3 1 - Object1 2 - Object2 4 - Object4

到目前为止,我有:

Map<Integer, GeoPoint> mapPoints = new HashMap<Integer, GeoPoint>();
Map<Integer, GeoPoint> mapPointsShuffle = new HashMap<Integer, GeoPoint>();

    for (int t =0; t < 50; t ++){

        Collections.shuffle((List<?>) mapPoints);

        mapPointsShuffle.putAll(mapPoints);
    }

所以这个想法是给我50个随机排列。但它回来了:

09-26 11:15:27.813:E / AndroidRuntime(20434):java.lang.ClassCastException:java.util.HashMap无法强制转换为java.util.List

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

java.util.HashMap 未实现 java.util.List

答案 1 :(得分:1)

您应首先从hashmap键创建一个列表:

List<Integer> keys = new List<Integer>(mapPoints.keySet());

然后,您可以使用帖子显示的方式Collections中的方法来重新排列键列表。

然而,你的循环的最后一次调用毫无意义:

mapPointsShuffle.putAll(mapPoints);

即使您将密钥重新洗牌五十次,也会将相同的地图条目添加到另一个地图五十次,从而生成您已启动的地图,因为哈希地图无序

答案 2 :(得分:0)

This link指导您如何从散列图生成列表,得到这个而不是试图改组散列图!!

答案 3 :(得分:0)

如何将地图投射到列表?

Collections.shuffle((List)mapPoints);

你想要洗牌吗?对于HashMap,您无​​法预测返回键的顺序。所以,你最好把钥匙放在一个列表中然后随机播放。