我正在尝试创建一个哈希映射的排列,这个哈希映射对键进行键入并以随机顺序多次将它们混洗,但保留相同的对象。
到目前为止,我有:
Map<Integer, GeoPoint> mapPoints = new HashMap<Integer, GeoPoint>();
ArrayList<Integer> keys2 = new ArrayList<Integer>(mapPoints.keySet());
for (int t =0; t < 50; t ++){
Collections.shuffle(keys2);
}
但是从我能收集的内容来看,它并没有改变它们。任何人都可以看到我做错了什么。
答案 0 :(得分:2)
“洗牌”对你来说是什么样的? HashMap
中没有按键顺序。您需要LinkedHashMap
来保留广告订单。
随机移动Collection
密钥不会影响Map
本身;你迭代它来访问Map
键。
在运行它之后,看看它是否为您提供了不同的顺序。
Map<Integer, GeoPoint> mapPoints = new HashMap<Integer, GeoPoint>();
System.out.println("before shuffle ");
Set<Integer> keys = mapPoints.keySet();
for (int key : keys) {
System.out.println("key : " + key + " value: " + mapPoints.get(key));
}
Collections.shuffle(keys); // don't know why multiple shuffles are required. deck of cards?
System.out.println("after shuffle ");
for (int key : keys) {
System.out.println("key : " + key + " value: " + mapPoints.get(key));
}