首页 > 解决方案 > 如何在Java中的arraylist中递归所有孩子

问题描述

我正在研究一个方法,它应该返回一个包含所有后代的 Arraylist。它几乎可以工作,但总是包括第一个(“最高”)人,但我不需要他。任何人都可以改进我的代码吗?谢谢

getChildren - 只返回一个人的孩子

public ArrayList<Person> getDescendants() {
        ArrayList<Person> descendants = new ArrayList<Person>();
        ArrayList<Person> next = this.getChildren();
        if (next.size() != 0) {
            for (int i = 0; i < next.size(); i++) {
                ArrayList<Person> b = next.get(i).getDescendants();
                descendants.addAll(b);
                if (!descendants.contains(this)) {
                    descendants.add(this);
                }
            }
            return descendants;
        } else {
            descendants.add(this);
            return descendants;
        }
    }

标签: javarecursion

解决方案


您的代码似乎过于复杂。你是这个意思吗?

public ArrayList<Person> getDescendants() {
    ArrayList<Person> descendants = new ArrayList<Person>();
    for (Person child : this.getChildren()) {
        descendants.add(child);
        descendants.addAll(child.getDescendants());
    }
    return descendants;
}

推荐阅读