2017-08-02 32 views
2

我正在检索,并从外部源复制一个相当大的文件夹对象集合。它们都有一个文件夹ID和一个父文件夹ID,但不是以树结构的形式出现的。在检索它们之后,我将它们组织到树节点对象中,并使用顶级根目录。但是,一个或多个文件夹会创建一个循环引用,并且我无法确定如何查明位置。我如何在大量对象中精确定位循环对象引用?

Java在创建循环引用时不会引发任何错误。在将它发送到Web应用程序的客户端之前,当我尝试将其编码为json格式时,该错误会出现一个stackoverflow错误。因为错误是我第一次看到的,所以我根本看不出哪个对象是错误的原因。

在这个特殊的问题中,我失去了一个策略。是否有任何标准化的或好的方法来识别循环对象引用,就像我的情况那样?

+0

一个文件夹可以有多个父项吗?你谈论文件夹对象。它是父子关系或文件夹对象的集合吗? – Persixty

+0

只有一位家长。我发现错误是在我自己的精炼代码中,而不是在对象引用中。 – KjetilNordin

+0

我想知道。如果每个节点只有一个父节点,我不确定你是如何构建对象树的。除非找到所有的根节点,然后继续添加父节点已经实例化的节点,否则很难做到这一点。如果存在循环,则会在树中没有父节点的节点结束。那是因为他们形成循环。循环几乎弹出算法的结尾。 – Persixty

回答

3

向节点类添加一个“visited”布尔标志,初始化为false。遍历树。如果在给定节点上,当你到达时标志为真,那么你已经检测到一个循环。否则,将该标志设置为true并继续遍历树。不区分使用哪种遍历顺序(前=后或顺序)。

+0

当然...谢谢。我今天一定很累:)。 – KjetilNordin