2013-10-17 27 views
1

我有一個Person的對象結構如下,我想根據他的名字搜索一個Person。在Java中搜索嵌套對象的邏輯是什麼?

public Person{ 

    String name; 

    List<Person> person; 

} 

我們該如何實現這個搜索方法?

將有一個根對象是Person,並且它具有與其他人的鏈接等。

人的名字是獨一無二的。

搜索簽名可能是

public Person findPerson(Person root, String name){ 

} 

我可以看看它作爲thisthis

任何人都可以爲此提出任何其他解決方案嗎?

回答

4

您將需要遞歸。遍歷列表中的所有人並在該人內搜索相同的目標。一旦你找到你的目標,返回並停止所有搜索。

下面是一些僞代碼:

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; 
+0

這有可能沒有遞歸? – Sam

+0

但是遞歸是一個好習慣嗎?我個人沒有看到任何其他遞歸作爲這個問題的一個很好的解決方案。 – Sam

+1

你有一個遞歸數據結構,所以遞歸看起來很自然。在極端情況下,你可能會有一個數據結構,例如,非常「高」的堆棧要求,然後可能會過度。然而,在你的問題我會使用遞歸,直到我找到一個不好的理由。 – djna

2

你將需要訪問的每個人,每個人每個人持有,這是使用遞歸算法,因此它是深度優先容易實現。

需要考慮的一件事:你知道名稱是獨一無二的嗎?如果不是,你需要返回一個匹配的人名單,如果你想要做一個名稱模式匹配,這可能是合適的:所有人的姓氏是「史密斯」

+0

添加了只有唯一名稱的假設。 – Sam

0

你可以使用反射。在運行時檢查Person的實例是否具有Person類型的變量,然後調用其getter。做它recursevly最小化和優化代碼。

+0

我無法理解這裏的反射的使用。 – Sam

+0

爲什麼要使用反射?每個人都有一位成員指向一個人名單。這些人關係中的週期是一個問題。使用反射來解決這類問題效率不高 – Matthias