为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Java中的arraylist中递归所有子级

如何在Java中的arraylist中递归所有子级

鸿蒙传说 2023-08-16 10:02:00
我正在研究一种方法,该方法应该返回包含所有后代的数组列表。它几乎可以工作,但第一个(“最高”)人总是包括在内,但我不需要他。有人可以改进我的代码吗?谢谢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;        }    }
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

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


public ArrayList<Person> getDescendants() {

    ArrayList<Person> descendants = new ArrayList<Person>();

    for (Person child : this.getChildren()) {

        descendants.add(child);

        descendants.addAll(child.getDescendants());

    }

    return descendants;

}


查看完整回答
反对 回复 2023-08-16
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

descendants.add(this);

您正在明确地将父级添加到您的后代列表中。不要那样做。

另请注意,该if声明不是必需的。当子列表的长度为零时,循环根本不会迭代。


查看完整回答
反对 回复 2023-08-16
  • 2 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信