在Java中搜索嵌套对象的逻辑是什么?

在Java中搜索嵌套对象的逻辑是什么?,java,search,data-structures,Java,Search,Data Structures,我有一个对象结构的人如下,我想搜索一个人的基础上,他的名字 public Person{ String name; List<Person> person; } 我可以把它看作是或 有人能提出其他解决方案吗?您需要递归。迭代列表中的所有人员,并在该人员中搜索同一目标。找到目标后,返回并停止所有搜索 下面是一些伪代码: Person search(Person, Name) if (Person.Name == Name) return Person;

我有一个对象结构的人如下,我想搜索一个人的基础上,他的名字

public Person{

   String name;

   List<Person> person;

}
我可以把它看作是或


有人能提出其他解决方案吗?

您需要递归。迭代列表中的所有人员,并在该人员中搜索同一目标。找到目标后,返回并停止所有搜索

下面是一些伪代码:

Person search(Person, Name)
    if (Person.Name == Name) return Person;
    for each subPerson in Person.person:
        Person found = subPerson.search(Person, Name);
        if (found != null) return found;
    return null;

您将需要递归。迭代列表中的所有人员,并在该人员中搜索同一目标。找到目标后,返回并停止所有搜索

下面是一些伪代码:

Person search(Person, Name)
    if (Person.Name == Name) return Person;
    for each subPerson in Person.person:
        Person found = subPerson.search(Person, Name);
        if (found != null) return found;
    return null;

您将需要访问每个人,每个人持有的每个人,这很容易使用递归算法实现,因此是深度优先


有一件事需要考虑:你知道名字是唯一的吗?如果没有,您需要返回匹配人员的列表,如果您想对姓名进行模式匹配,那么这可能是最合适的:所有姓氏为“Smith”的人都需要访问每个人,每个人持有的每个人,这可以使用递归算法轻松实现,因此,这是深度优先


有一件事需要考虑:你知道名字是唯一的吗?如果没有,您需要返回匹配人员的列表,如果您想在姓名上进行模式匹配,那么这可能是最合适的:所有姓氏为“Smith”的人都可以使用反射。在运行时检查Person的实例是否具有Person类型的变量,然后调用其getter。递归地执行此操作以最小化和优化代码。

您可以使用反射。在运行时检查Person的实例是否具有Person类型的变量,然后调用其getter。以递归方式最小化和优化代码。

不使用递归是否可行?但递归是一种好的做法吗?我个人不认为递归是解决这个问题的好方法。你有一个递归数据结构,所以递归看起来很自然。在极端情况下,您可能有一个数据结构,比如说,非常“高”的堆栈要求,然后可能会变得过多。然而,在你的问题中,我会使用递归,直到我找到一个不使用的好理由。没有递归,这是可能的吗?但是递归是一个好的实践吗?我个人不认为递归是解决这个问题的好方法。你有一个递归数据结构,所以递归看起来很自然。在极端情况下,您可能有一个数据结构,比如说,非常“高”的堆栈要求,然后可能会变得过多。然而,在你的问题中,我会使用递归,直到我找到一个很好的理由不这样做。我不理解反射在这里的用法。为什么要使用反射?每个人都已经有一个成员指向一个人员列表。这些人之间的关系周期是一个问题。使用反射来解决这种问题是没有效率的。我不理解反射在这里的用法。为什么要使用反射?每个人都已经有一个成员指向一个人员列表。这些人之间的关系周期是一个问题。使用反射来解决这类问题是低效的