所以在一次採訪中,我被問到了一個簡單的問題,就是說我有一個嵌套的JSON響應[a,b,c,d [a,[b,[d,e ],g],h]。有人問我實現一個類,基本上可以處理存儲這些數據,並打印方法,這樣做的,所以這是我有:檢測循環引用
public class JSONode
{
private String str;
private JSONode nodes;
public JSONode (String a, ArrayList<String> n)
{
str = a;
nodes = n;
}
}
public class JSONResp
{
private ArrayList<JSONode> arr;
public JSONResp()
{
arr = new ArrayList<JSONode>();
}
public boolean checkCircular(JSONode temp)
{
for (int i = 0; i < arr.size(); i++)
{
if (arr.get(i).nodes == temp)
return true;
}
return false;
}
public void add (JSONode nd)
{
if (!checkCircular(nd))
arr.add(nd);
}
public void recurseJSONode(JSONode)
{
if (!JSONode.node)
System.out.print(JSONode.str);
else {
System.out.print(JSONode.str);
recurseJSONode(JSONode.node);
}
}
public void print()
{
for (int i = 0; i < arr.size(); i++)
recurseJSONode(arr.get(i));
}
public static void main (String[] args) {
JSONResp x = new JSONResp();
x.add(new JSONode("a", null);
x.add(new JSONode("b", null);
}
}
現在,他說,將有循環引用的問題,當我打印,在換句話說,我有列表A = [a,b,c,D]和D = [q,t,y,A]。所以他說我必須通過使用上面的checkCircular來防止添加D.我做了一個嘗試。也只是一個節點,我知道我的recurseJSONode是不正確的,打印也是這樣,所以尋找一個建議來解決這個問題。我只是好奇這個問題。
你爲什麼要檢查JSNode和ArrayList? – adit
你能解釋一下如何使用這個例子 – adit
這是一個基本的遞歸搜索算法。一類人會讓他的父母或孩子。對於每個班級你都必須檢查引用的班級,它是否符合你的搜索標準。如果沒有,你必須檢查引用類的引用類。在算法開始時,您必須定義停止標準,以停止遞歸調用。只是谷歌,你會發現一些簡單的遞歸示例 –