2017-08-02 54 views
2

我正在檢索,並從外部源複製一個相當大的文件夾對象集合。它們都有一個文件夾ID和一個父文件夾ID,但不是以樹結構的形式出現的。在檢索它們之後,我將它們組織到樹節點對象中,並使用頂級根目錄。但是,一個或多個文件夾會創建一個循環引用,並且我無法確定如何查明位置。我如何在大量對象中精確定位循環對象引用?

Java在創建循環引用時不會引發任何錯誤。在將它發送到Web應用程序的客戶端之前,當我嘗試將其編碼爲json格式時,該錯誤會出現一個stackoverflow錯誤。因爲錯誤是我第一次看到的,所以我根本看不出哪個對象是錯誤的原因。

在這個特殊的問題中,我失去了一個策略。是否有任何標準化的或好的方法來識別循環對象引用,就像我的情況那樣?

+0

一個文件夾可以有多個父項嗎?你談論文件夾對象。它是父子關係或文件夾對象的集合嗎? – Persixty

+0

只有一位家長。我發現錯誤是在我自己的精煉代碼中,而不是在對象引用中。 – KjetilNordin

+0

我想知道。如果每個節點只有一個父節點,我不確定你是如何構建對象樹的。除非找到所有的根節點,然後繼續添加父節點已經實例化的節點,否則很難做到這一點。如果存在循環,則會在樹中沒有父節點的節點結束。那是因爲他們形成循環。循環幾乎彈出算法的結尾。 – Persixty

回答

3

向節點類添加一個「visited」布爾標誌,初始化爲false。遍歷樹。如果在給定節點上,當你到達時標誌爲真,那麼你已經檢測到一個循環。否則,將該標誌設置爲true並繼續遍歷樹。不區分使用哪種遍歷順序(前=後或順序)。

+0

當然...謝謝。我今天一定很累:)。 – KjetilNordin