Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java像图形一样遍历大型哈希映射_Java_Recursion_Graph_Hashmap - Fatal编程技术网

Java像图形一样遍历大型哈希映射

Java像图形一样遍历大型哈希映射,java,recursion,graph,hashmap,Java,Recursion,Graph,Hashmap,我有一个大的HashMap,这样说: {INDIANBATSMAN=[INDIAN, CRICKETER], COMPANY=[THING], INDIAN=[LIVING], LIVING=[THING], PERSON=[LIVING], CRICKETER=[PERSON], CANADIAN=[LIVING], SCANDINAVIAN=[LIVING]} 这实际上对应于一个图形结构,这意味着每个键与其值集之间都有边。我希望遍历每个链接,并找到从初始节点可以访问的所有节点,

我有一个大的
HashMap
,这样说:

    {INDIANBATSMAN=[INDIAN, CRICKETER], COMPANY=[THING],
 INDIAN=[LIVING], LIVING=[THING], PERSON=[LIVING],
 CRICKETER=[PERSON], CANADIAN=[LIVING], SCANDINAVIAN=[LIVING]}
这实际上对应于一个图形结构,这意味着每个键与其值集之间都有边。我希望遍历每个链接,并找到从初始节点可以访问的所有节点,作为我的键的值集

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

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

您当前的表示(
map
)称为,非常适合于标准的遍历算法,如广度优先或深度优先

这样做应该可以:

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)
visted=空集
q=空列表
q、 添加(开始节点)
已访问。添加(startNode)
while(q为非空)
节点n=q.removeFirst()
过程(n)
Set children=yourMap.get(n)
用于(节点子节点:子节点)
如果(!包含子项)
已访问。添加(n)
q、 添加(子项)

您当前的表示(
Map
)称为,非常适合于标准的遍历算法,如宽度优先或深度优先

这样做应该可以:

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)
visted=空集
q=空列表
q、 添加(开始节点)
已访问。添加(startNode)
while(q为非空)
节点n=q.removeFirst()
过程(n)
Set children=yourMap.get(n)
用于(节点子节点:子节点)
如果(!包含子项)
已访问。添加(n)
q、 添加(子项)