2015-01-13 3 views
0

I는 [발에] 나타내는 해시 맵을 가지고찾기 서열

1st: [start->sb1] 
2nd: [sb0->sb3] 
3rd: [sb1->sb0] 
4th: [sb3->end] 

올바른 순서 등 찾을 수있는 방법이 있다면 싶습니다 :

start->sb1->sb0->sb3->end 
+2

물론 있습니다. 너 뭐 해봤 니? – chrylis

답변

1

간단한 재귀 트릭을 수행 할 수 있습니다

public static void main(String... args) { 
    Map<String, String> path = new HashMap<>(); 
    path.put("start", "sb1"); 
    path.put("sb0", "sb3"); 
    path.put("sb1", "sb0"); 
    path.put("sb3", "end"); 

    printPath(path, "start"); 
} 

void printPath(Map<String, String> path, String next) { 
    if (next != null) { 
     System.out.print(next); 
     printPath(path, path.get(next)); 
    } 
} 

이 IMPL 단순히 System.out에있는 모든 항목을 인쇄합니다. 나중에 프로그램에서 사용하려면 List 또는 유사한 것으로 수집하는 것이 좋습니다.

List<String> result = new ArrayList<>(); 
buildPath(path, "start", result); 

void buildPath(Map<String, String> path, String token, List<String> result) { 
    if (token != null) { 
     result.add(token); 
     buildPath(path, path.get(token), result); 
    } 
} 
+0

고마워요! – Zuser

+0

을 사용하면 예를 com.google.common.collect.Multimap? – Zuser

4

을 당신이 start 키를 알고 있다면, 그것은 아주 간단합니다

String key = "start"; 
while (key != null && !key.equals("end")) { 
    System.out.print(key + "->"); 
    key = map.get(key); 
} 
if (key != null) 
    System.out.println(key); 

이것은 문자열 맵의 키와 값을 가정합니다.

관련 문제