2012-09-26 48 views
1

所以我有一個包含鍵和對象的散列表。我想知道是否可以用鍵創建一些排列組合。因此,例如,如果我有:Java - 從hashmap鍵創建排列

1 - Object1 2 - 對象2 3 - Object3 4 - Object4

爲了得到一個隨機順序。所以,一個結果可能是:

3 - Object3 1 - Object1 2 - 對象2 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個隨機排列。但它回來了:

11月9日至26日:15:27.813:E/AndroidRuntime(20434):java.lang.ClassCastException:java.util.HashMap中不能轉換爲java.util.List的

有任何想法嗎?

+0

爲什麼你需要像** java.util.HashMap **這樣的關聯集合中的隨機排列? – CAMOBAP

+0

'mapPoints'是Map接口的一個實現。你不能將它轉換爲List接口! – ramsinb

回答

1

的java.util.HashMap沒有實現的java.util.List

0

This link指導您如何從一個HashMap的列表,得到這個,而不是試圖洗牌HashMap中!

1

你應該從HashMap的鍵先製作一個列表:

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

然後你可以使用洗牌在Collections的方式您的帖子表明,該方法的關鍵列表。

你的循環的最後一次通話是沒有意義的,但是:

mapPointsShuffle.putAll(mapPoints); 

即使你重新洗牌的關鍵五十次,這將超過五十次添加相同的映射條目到另一個地圖,導致你已經開始的地圖,因爲散列圖是無序的

0

如何將地圖投影到列表中?

Collections.shuffle((List)mapPoints);

你試圖洗牌的鑰匙?對於HashMap,您無​​法預測將返回鍵的順序。所以,你最好在列表中獲取密鑰,然後洗牌。