2011-01-17 2 views
0

Ich habe Map<String, String>, die Elemente wie enthält: {"a" = "b", "b" = "c", "c" = "d", "z" = "y", ... }.Transitive transitive Tasten in Karte

Ich brauche eine Methode:

List<String> getTransitiveKeys(String startKey);// assuming the map is visible somehow as `map` 

Wenn getTransitiveKeys(“a”) genannt wird, wird er zurückkehren [ „a“, „b“, „c“]. Wenn getTransitiveKeys (“z”) aufgerufen wird, wird [[z]] zurückgegeben.

Rekursion in der Methode benötigt?

Danke!

+0

Ist das Hausaufgaben? –

+0

Sieht einfach wie eine Hausaufgabe aus. Ich abstrahiere einfach das Problem und möchte einen einfachen Weg, um die Funktion zu implementieren. –

Antwort

4
List<String> getTransitiveKey(String key) { 
    List<String> result = new LinkedList<String>(); 
    while(map.containsKey(key)) { 
    // avoid endless loops 
    if(result.contains(key)) { 
     break; 
    } 

    result.add(key); 
    key = map.get(key) 
    } 
    return result; 
} 
+0

"Endlosschleifen vermeiden" ist ein toller Punkt! –

0

Warum Rekursion? nur eine einzige Schleife

while(map.get(startKey) != null) { 
    startKey = map.get(startKey); 
}