我只是在查看一些代码并遇到了一个我无法解释的问题,很可能是因为我的Java有点生疏......代码采用嵌套的节点集合并展平。 / p>
这是原始代码段:
private static List<NavigationNode> flatten(
List<NavigationNode> nodes,
List<NavigationNode> flattenedNodes) {
if (nodes == null || nodes.isEmpty()) {
return Collections.emptyList();
}
for (NavigationNode node : nodes) {
flattenedNodes.add(node);
flattenedNodes.addAll(flatten(node.getChildren(), flattenedNodes));
}
return flattenedNodes;
}
我遇到的问题是,当嵌套列表变得足够大时,会抛出java.lang.OutOfMemoryError。
如果我新推平顶列表而不是作为参数传递并重构为:
private static List<NavigationNode> flatten(
List<NavigationNode> nodes) {
if (nodes == null || nodes.isEmpty()) {
return Collections.emptyList();
}
List<NavigationNode> flattenedNodes = new ArrayList<NavigationNode>();
for (NavigationNode node : nodes) {
flattenedNodes.add(node);
flattenedNodes.addAll(flatten(node.getChildren()));
}
return flattenedNodes;
}
不再出现内存错误。
非常感谢任何帮助,优秀的描述或进一步的重构!