我有一个Person的对象结构,如下所示,我想根据他的名字搜索一个人。
public Person{
String name;
List<Person> person;
}
我们如何为此实现搜索方法?
将有一个根对象是Person,它与其他人有链接等等。
人员的名字是独一无二的。
搜索签名可以是
public Person findPerson(Person root, String name){
}
有人可以为此建议任何其他解决方案吗?
答案 0 :(得分:5)
你需要递归。迭代列表中的所有人,并在该人中搜索相同的目标。找到目标后,返回并停止所有搜索。
这是一些伪代码:
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;
答案 1 :(得分:2)
您将需要访问每个人,每个人都拥有,这很容易使用递归算法实现,因此深度优先。
要考虑的一件事:你知道名字是独一无二的吗?如果不是,你将需要返回一个匹配人员列表,如果你想对名称进行模式匹配,那么这可能是合适的:所有姓氏为“史密斯”的人
答案 2 :(得分:0)
你可以使用反射。在运行时检查Person的实例是否具有Person类型的变量,然后调用其getter。以递归方式执行以最小化和优化代码。