解决Java数组列表删除递归索引



我有一个奇怪的问题,我知道周围的工作,但我想做它与数组列表这次。问题是:我有一个员工树。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循环中使用它。

最新更新