如何在Java中的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;

        }

    }


鸿蒙传说
浏览 100回答 2
2回答

梵蒂冈之花

您的代码似乎过于复杂。你是这个意思吗?public ArrayList<Person> getDescendants() {&nbsp; &nbsp; ArrayList<Person> descendants = new ArrayList<Person>();&nbsp; &nbsp; for (Person child : this.getChildren()) {&nbsp; &nbsp; &nbsp; &nbsp; descendants.add(child);&nbsp; &nbsp; &nbsp; &nbsp; descendants.addAll(child.getDescendants());&nbsp; &nbsp; }&nbsp; &nbsp; return descendants;}

犯罪嫌疑人X

descendants.add(this);您正在明确地将父级添加到您的后代列表中。不要那样做。另请注意,该if声明不是必需的。当子列表的长度为零时,循环根本不会迭代。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java