如上文所述,显然当数据成环时候我们无论如何也无法将数据从列表变为树型返回。
那么对列表数据进行成环检测便成了必要的数据效验,如果成环直接抛出异常,提醒开发进行验证,避免程序进入死循环。
总的来说有两种方案,一种是搜索,另一种是拓扑排序。具体代码可参考
妙不可言系列——拓扑排序
如果仅仅是检测成环,使用简单的搜索即可。
但是如果使用拓扑排序可以在成环检测的同时顺带帮住我们解决另一个问题!
回想我们在第二节中提到的关于死循环的原因。
因为list的顺序不确定造成了需要map记录,为了确保map的size和list的size大小最终一致而导致了可能因为成环而出现的死循环。
通过拓扑排序第二篇文章可知,拓扑排序可以帮助我们直接将list排列成可一次遍历即全部放入resultList的顺序。
于是根本上解决了死循环问题,并且减少了大量不必要的循环和检测,提高了效率。
那么将list稍作处理,便可运用拓扑排序进行成环检测并得到顺序。
网友评论