我有一个奇怪的问题,我知道周围的工作,但我想做它与数组列表这次。问题是:我有一个员工树。Employee是一个简单的类(在为该员工工作的员工列表下):
class Employee
{
String name;
ArrayList<Employee> under = new ArrayList<Employee>();
//fire function
}
我的任务是递归地解雇所有没有下属的员工。我知道如何与周围的工作与自定义列表数据结构,但我想做它与数组列表。下面是我到目前为止的代码:
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;
}
但是这段代码的问题是,当我删除under.remove(x)时,under.size()变得更小,索引变得混乱。我试图设置x = 0,在每个下面。remove(x),但它没有完全正确。还剩一名员工。有数组列表结构的解决方案吗?
这是一个典型的删除或删除问题。
必须向后遍历List。这样,当你删除一个元素时,你就不会跳过其他元素,也不会越过List的末尾。
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;
}
尝试使用迭代器。你只需在迭代器上使用.next()
遍历它,每当你发现某人没有员工时,你调用.remove()
(在迭代器上),它将删除迭代器给你的最后一个元素。
这就是为什么Iterator有remove()方法。查找Collection的iterator()调用并在for循环中使用它。