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。