在哈希图中查找序列
find sequence in the hashmap
我有一个 hashmap 表示 [from, to]:
1st: [start->sb1]
2nd: [sb0->sb3]
3rd: [sb1->sb0]
4th: [sb3->end]
我想是否有办法找到正确的序列,例如:
start->sb1->sb0->sb3->end
如果你知道 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);
这假设映射的键和值是字符串。
简单的递归就可以解决问题:
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);
}
}
我有一个 hashmap 表示 [from, to]:
1st: [start->sb1]
2nd: [sb0->sb3]
3rd: [sb1->sb0]
4th: [sb3->end]
我想是否有办法找到正确的序列,例如:
start->sb1->sb0->sb3->end
如果你知道 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);
这假设映射的键和值是字符串。
简单的递归就可以解决问题:
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);
}
}