我想将树结构(源)复制到另一个(目标),但是当我执行下面的方法时,我得到了java.util.ConcurrentModificationException:
private void mergeNode(TreeLayoutNode source, TreeLayoutNode target){
List<TreeLayoutNode> children = source.getChildren();
if(CollectionUtils.isEmpty(children)){
return;
}
Iterator<TreeLayoutNode> it = children.iterator();
while(it.hasNext()){
**TreeLayoutNode child = it.next();**
TreeLayoutNode copy = new TreeLayoutNode();
copy.setName(child.getName());
copy.setCapacity(child.getCapacity());
copy.setParent(child.getParent());
copy.setChildren(child.getChildren());
copy.setProportions(child.getProportions());
target.addChildNode(copy);
mergeNode(child, copy);
}
}
以“**”开头的代码是发生异常的地方。任何人都可以提供任何提示吗?
答案 0 :(得分:1)
删除对'copy.setChildren(child.getChildren())'的调用。这导致引用源树中的子项被添加到目标树,这不是您想要的。递归方法调用将处理孩子的填充。
此外,您需要将新节点的父节点设置为新树中的正确节点,而不是调用'copy.setParent(child.getParent())',它将父节点引用设置为旧树中的节点。调用应该是'copy.setParent(target)'。