2012-09-26 2 views
1

그래서 키와 객체가있는 해시 맵을 가지고 있습니다. 열쇠로 많은 수의 순열을 만들 수 있는지 궁금합니다. 그래서 예를 들어 내가 한 경우 :자바 - 해시 맵 키에서 순열 만들기

1 - 오브젝트 1 2 - Object2 3 - 오브젝트 4 4 -

오브젝트 4

을 임의의 순서를 얻으려면. 그래서 하나 개의 결과가 될 수있다 :

3 - 오브젝트 4 1 - 오브젝트 1 2 - Object2 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)를 제공하기 위해 순열.

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 가이드를 구현하지 않습니다, 해시 맵 셔플을 시도 대신이를 얻을!

1

먼저 해시 맵의 키에서 목록을 작성해야합니다

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

그런 다음 당신이 Collections 방법 게시물 쇼의 방법을 사용하여 키 목록을 셔플 수 있습니다.

루프의 마지막 호출하지만, 말이 안 : 당신이 키를 쉰 시간을 다시 셔플하더라도

mapPointsShuffle.putAll(mapPoints); 

,이 결과, 오십 번 이상 다른지도에 동일한 맵 항목을 추가 해시 맵은 으로 정렬되어 있지 않으므로 시작한지도는입니다.

0

지도를 어떻게 목록에 캐스트 할 수 있습니까?

Collections.shuffle ((List) mapPoints);

키를 임의로 이동하려고합니까? HashMap의 경우 키를 반환 할 순서를 예측할 수 없습니다. 따라서 목록에서 키를 얻은 다음 잘 섞으십시오.