所以我有一个包含键和对象的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
有什么想法吗?
答案 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,您无法预测返回键的顺序。所以,你最好把钥匙放在一个列表中然后随机播放。