在hashmap中查找序列

时间:2015-01-13 08:06:33

标签: java sorting hashmap sequence

我有一个代表[from,to]的hashmap:

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

我想如果有办法找到正确的序列,例如:

start->sb1->sb0->sb3->end

2 个答案:

答案 0 :(得分: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);

这假设地图的键和值是字符串。

答案 1 :(得分: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);
    }
}