【问题标题】:What is the logic for searching nested objects in Java?在 Java 中搜索嵌套对象的逻辑是什么?
【发布时间】:2013-10-25 11:44:57
【问题描述】:

我有一个 Person 的对象结构如下,我想根据他的名字搜索一个 Person。

public Person{

   String name;

   List<Person> person;

}

我们如何为此实现搜索方法?

会有一个根对象,即 Person,它与其他人有链接等等。

而且 Person 的名字是唯一的。

搜索签名可以是

public Person findPerson(Person root, String name){

}

我可以将其视为thisthis

谁能为此提出任何其他解决方案?

【问题讨论】:

    标签: java search data-structures


    【解决方案1】:

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

    【讨论】:

    • 这里我看不懂反射的使用。
    • 为什么要使用反射?每个人都有一个指向人员列表的成员。这些人的关系周期是一个问题。对这类问题使用反射是低效的
    【解决方案2】:

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

    要考虑的一件事:您知道名称是独一无二的吗?如果不是,您将需要返回匹配人员的列表,如果您想对名称进行模式匹配,这可能是合适的:所有姓氏为“Smith”的人

    【讨论】:

      【解决方案3】:

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

      这是一些伪代码:

      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;
      

      【讨论】:

      • 没有递归可以吗?
      • 但是递归是个好习惯吗?我个人不认为递归是解决这个问题的好方法。
      • 你有一个递归数据结构,所以递归看起来很自然。在极端情况下,您可能有一个数据结构,比如说,非常“高”的堆栈要求然后可能会变得过多。但是,在您的问题中,我会使用递归,直到找到不这样做的充分理由。
      猜你喜欢
      • 2019-04-20
      • 2020-06-15
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 2020-06-11
      相关资源
      最近更新 更多