使用递归索引解决Java ArrayList remove问题?
我有一个奇怪的问题,我知道如何解决,但这次我想用数组列表来解决。问题是: 我有一棵员工树。Employee是一个简单的类(下面是为该员工工作的员工列表):使用递归索引解决Java ArrayList remove问题?,java,algorithm,recursion,arraylist,Java,Algorithm,Recursion,Arraylist,我有一个奇怪的问题,我知道如何解决,但这次我想用数组列表来解决。问题是: 我有一棵员工树。Employee是一个简单的类(下面是为该员工工作的员工列表): class员工 { 字符串名; ArrayList under=new ArrayList(); //消防功能 } 我的任务是反复解雇所有没有员工的员工。我知道如何处理定制列表数据结构,但我想使用数组列表。以下是我目前的代码: public boolean Fire() { if (under.isEmpty())
class员工
{
字符串名;
ArrayList under=new ArrayList();
//消防功能
}
我的任务是反复解雇所有没有员工的员工。我知道如何处理定制列表数据结构,但我想使用数组列表。以下是我目前的代码:
public boolean Fire()
{
if (under.isEmpty())
return true;
else
{
for (int x = 0; x < under.size(); x ++)
{
if (under.get(x).Fire())
under.remove(x);
}
}
return false;
}
public boolean Fire()
{
if(在.isEmpty()下)
返回true;
其他的
{
对于(int x=0;x
但这段代码的问题是,当我在.remove(x)下删除时,.size()下的会变小,索引也会变得混乱。我试图在.remove(x)下的每个之后设置x=0,但没有完全正确。还有一个员工。是否有数组列表结构的解决方案?尝试使用迭代器。您只需在迭代器上使用
.next()
不断遍历它,每当您发现某人的手下没有员工时,就调用.remove()
(在迭代器上),这将删除迭代器给您的最后一个元素。这是删除或删除的典型问题
您必须在列表中向后迭代。这样,当您删除一个元素时,您就不会跳过其他元素或跳过列表的末尾
public boolean Fire()
{
if (under.isEmpty())
return true;
else
{
for (int x = under.size() - 1; x >= 0; x--)
{
if (under.get(x).Fire())
under.remove(x);
}
}
return false;
}
这就是迭代器具有remove()方法的原因。查找集合的迭代器()调用,并在for循环中使用它。我倾向于记住那些从后面咬我的问题。:-)
public boolean Fire()
{
if (under.isEmpty())
return true;
else
{
for (int x = under.size() - 1; x >= 0; x--)
{
if (under.get(x).Fire())
under.remove(x);
}
}
return false;
}