Java 如何删除树中的无效子节点

Java 如何删除树中的无效子节点,java,Java,我有下面的树类,它具有以下属性及其getter和setter public class Tree { private String name, address; private List<Tree> child; } 最简单的方法是在树中添加removeChild()方法: public class Tree { List<Tree> child; public void removeChild(Tree tree) {

我有下面的
类,它具有以下属性及其getter和setter

public class Tree {
   private String name, address;
   private List<Tree> child; 
}

最简单的方法是在
树中添加
removeChild()
方法:

public class Tree {

    List<Tree> child;

    public void removeChild(Tree tree) {
        child.remove(tree);
    }
}

但是,当您更改正在循环的集合时,您应该始终非常怀疑。我强烈建议保留原始的
,并创建第二个有效的
,该树只包含有效节点。

最简单的方法是在
树中添加
removeChild()
方法:

public class Tree {

    List<Tree> child;

    public void removeChild(Tree tree) {
        child.remove(tree);
    }
}

但是,当您更改正在循环的集合时,您应该始终非常怀疑。我强烈建议保留原始的
,并创建第二个有效的
,该树只包含有效节点。

从集合中删除元素的安全方法是使用迭代器。在您的情况下,它可能如下所示:

List<Tree> children = tree.getChild();
for (Iterator<Tree> iterator = children.iterator(); iterator.hasNext();) {
    Tree node = iterator.next();
    if (list.contains(node.getName())){  // String elements in list
        validateTree(tree); //OK
    } else {
        iterator.remove();
    }
}
List children=tree.getChild();
for(Iterator Iterator=children.Iterator();Iterator.hasNext();){
树节点=迭代器.next();
if(list.contains(node.getName()){//列表中的字符串元素
validateTree(树);//确定
}否则{
iterator.remove();
}
}

从集合中删除元素的安全方法是使用迭代器。在您的情况下,它可能如下所示:

List<Tree> children = tree.getChild();
for (Iterator<Tree> iterator = children.iterator(); iterator.hasNext();) {
    Tree node = iterator.next();
    if (list.contains(node.getName())){  // String elements in list
        validateTree(tree); //OK
    } else {
        iterator.remove();
    }
}
List children=tree.getChild();
for(Iterator Iterator=children.Iterator();Iterator.hasNext();){
树节点=迭代器.next();
if(list.contains(node.getName()){//列表中的字符串元素
validateTree(树);//确定
}否则{
iterator.remove();
}
}

您能给我们看一下您的代码吗?您面临的问题是什么?请将您当前拥有的完整源代码(包括不工作的代码)添加到您的问题中。添加了我的validateTree方法。如果树与条件不匹配,我不知道如何从树中删除元素。变量列表是什么,我看不到它声明了什么类型。它是包含字符串值的ArrayList。请向我们展示您的代码好吗?您面临的问题是什么?请将您当前拥有的完整源代码(包括不工作的代码)添加到您的问题中。添加了我的validateTree方法。如果树与条件不匹配,我不知道如何从树中删除元素。变量列表是什么,我看不到它声明了什么类型。它是包含字符串值的ArrayList。