1

所以我有一个包含键和对象的哈希图。我想知道是否可以使用键创建多个排列。例如,如果我有:

1 - 对象 1 2 - 对象 2 3 - 对象 3 4 - 对象 4

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

3 - 对象 3 1 - 对象 1 2 - 对象 2 4 - 对象 4

到目前为止,我有:

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

3 回答 3

1

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

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

Collections然后,您可以使用帖子显示方式中的方法对密钥列表进行洗牌。

但是,循环的最后一次调用没有意义:

mapPointsShuffle.putAll(mapPoints);

即使您重新洗牌 50 次,这也会将相同的映射条目添加到另一个映射 50 次以上,从而产生您开始使用的映射,因为哈希映射是无序的。

于 2012-09-26T10:35:53.117 回答
1

java.util.HashMap没有实现java.util.List

于 2012-09-26T10:31:18.733 回答
0

您如何将地图投射到列表中?

Collections.shuffle((List) mapPoints);

你想洗牌吗?对于 HashMap,您无​​法预测返回键的顺序。因此,您最好在列表中获取键,然后随机播放。

于 2012-09-26T10:36:45.110 回答