Python代码起作用,而相同的Java代码不起作用

Python代码起作用,而相同的Java代码不起作用,java,python,graph-theory,Java,Python,Graph Theory,我有一个图,它被描述为具有以下结构的映射(Java和Python都是一样的,但示例是Python): 我想得到从'A'到'E'的所有路径。对于Python,它可以完美地工作: def find_all_paths(graph, start, end, path=[]): path = path + [start] if start == end: return [path] paths = [] for node in graph[start]: if node not in p

我有一个图,它被描述为具有以下结构的映射(Java和Python都是一样的,但示例是Python):

我想得到从'A'到'E'的所有路径。对于Python,它可以完美地工作:

def find_all_paths(graph, start, end, path=[]):
path = path + [start]
if start == end:
    return [path]
paths = []
for node in graph[start]:
    if node not in path:
        newpaths = find_all_paths(graph, node, end, path)
        for newpath in newpaths:
            paths.append(newpath)
return paths

OUTPUT: [['A', 'B', 'C', 'F', 'E'], ['A', 'B', 'D', 'C', 'F', 'E'], ['A', 'C', 'F', 'E']]
但在Java中,我没有得到正确的结果:

    static List<List<String>> findAllPaths(String start, String end, List<String> path) {
    path.add(start);
    if (start.equals(end)) {
        return List.of(path);
    }
    List<List<String>> paths = new ArrayList<>();
    for (String node : graph.get(start)) {
        if (!path.contains(node)){
            List<List<String>> newpaths = findAllPaths(node, end, path);
            paths.addAll(newpaths);
        }
    }
    return paths;
}

OUTPUT: [[A, B, C, D, F, E]]
静态列表findallPath(字符串开始、字符串结束、列表路径){
添加路径(开始);
如果(开始等于(结束)){
返回列表(路径);
}
列表路径=新的ArrayList();
for(字符串节点:graph.get(start)){
如果(!path.contains(节点)){
List newpath=findallpath(节点、结束、路径);
addAll(newpath);
}
}
返回路径;
}
输出:[[A、B、C、D、F、E]]

我已经对它进行了调试,并且知道Python为每个函数调用存储
path
变量,而Java为所有函数存储这个变量作为全局变量。但是,我不确定。你有什么建议吗?原因是什么?

path=path+[start]
不等同于
path.add(start)
。Python版本正在制作一个新的列表;Java版本正在更改现有列表


Java中的path=path+[start]等价物是先复制列表,然后添加新元素

path = new ArrayList<>(path);
path.add(start);
path=newarraylist(路径);
添加路径(开始);

如何调用此方法?
path=path+[start]
不等同于
path.add(start)
。Python版本正在制作一个新的列表;Java版本正在改变旧的列表。
path = new ArrayList<>(path);
path.add(start);