Java遍历大型HashMap,就像图形一样

时间:2012-04-18 05:16:48

标签: java recursion graph hashmap

我有一个很大的HashMap<String,Set<String>>,就像这样说:

    {INDIANBATSMAN=[INDIAN, CRICKETER], COMPANY=[THING],
 INDIAN=[LIVING], LIVING=[THING], PERSON=[LIVING],
 CRICKETER=[PERSON], CANADIAN=[LIVING], SCANDINAVIAN=[LIVING]}

这实际上对应于图形结构,这意味着每个键与其值集之间存在边缘。我想遍历每个链接,并找到从初始节点可到达的所有节点作为我的键的值集。

喜欢,

INDIANBATSMAN=[INDIAN,LIVING,THING,CRICKETER,PERSON]

最有效的方法是什么? (目前,我正在将其转换为邻接矩阵,因为我的地图很大,所以效率非常低。)

1 个答案:

答案 0 :(得分:4)

您当前的表示形式(Map<String, Set<String>>)称为adjacency list,非常适合标准遍历算法,例如广度优先或深度优先。

这样的事情应该做:

visited = empty set
q = empty list
q.add(startNode)
visited.add(startNode)
while (q is non-empty)
    Node n = q.removeFirst()
    process(n)
    Set<String> children = yourMap.get(n)
    for (Node child : children)
        if (! visited contains child)
            visited.add(n)
            q.add(child)