如上文所述测萎,顯然當(dāng)數(shù)據(jù)成環(huán)時候我們無論如何也無法將數(shù)據(jù)從列表變?yōu)闃湫头祷亍?br> 那么對列表數(shù)據(jù)進(jìn)行成環(huán)檢測便成了必要的數(shù)據(jù)效驗彭雾,如果成環(huán)直接拋出異常抄沮,提醒開發(fā)進(jìn)行驗證,避免程序進(jìn)入死循環(huán)粥庄。
總的來說有兩種方案丧失,一種是搜索,另一種是拓?fù)渑判蛳Щァ>唧w代碼可參考
妙不可言系列——拓?fù)渑判?/a>
如果僅僅是檢測成環(huán)布讹,使用簡單的搜索即可。
但是如果使用拓?fù)渑判蚩梢栽诔森h(huán)檢測的同時順帶幫住我們解決另一個問題训堆!
回想我們在第二節(jié)中提到的關(guān)于死循環(huán)的原因描验。
因為list的順序不確定造成了需要map記錄,為了確保map的size和list的size大小最終一致而導(dǎo)致了可能因為成環(huán)而出現(xiàn)的死循環(huán)坑鱼。
通過拓?fù)渑判虻诙恼驴芍炝鳎負(fù)渑判蚩梢詭椭覀冎苯訉ist排列成可一次遍歷即全部放入resultList的順序。
于是根本上解決了死循環(huán)問題鲁沥,并且減少了大量不必要的循環(huán)和檢測呼股,提高了效率。
那么將list稍作處理画恰,便可運用拓?fù)渑判蜻M(jìn)行成環(huán)檢測并得到順序彭谁。