如何在大量对象中查明循环对象引用?

How can i pinpoint a circular object reference in a large collection of objects?

我正在从外部源检索和复制大量文件夹对象。它们都有一个文件夹 ID 和一个父文件夹 ID,但不是树结构。检索它们后,我将它们组织在树节点对象中,并带有一个顶层根。但是,一个或多个文件夹创建了一个循环引用,我无法弄清楚如何查明位置。

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

在这个特定问题中,我不知所措。是否有任何标准化或好的方法来识别循环对象引用,就像我的情况一样?

向节点class添加一个"visited"布尔标志,初始化为false。遍历树。如果在给定节点处,当您到达时标志为真,那么您已经检测到环路。否则将标志设置为 true 并继续遍历树。使用哪种遍历顺序没有区别(pre= post- or in-order)。