運行環境
idea 2017.1.1
需求背景
需要做一個后台,可以編輯資源列表用於權限管理
資源列表中可以有父子關系,假設根節點為0,以下以(父節點id,子節點id)表示
當編輯某個資源時,需要帶出該資源的可選父資源,如編輯2號資源,除了他自己不可以作為自己的父資源,其他資源均可以帶出;若編輯3號資源,則只有0、1、2號資源可以帶出,其他節點均是3號資源的子孫節點
錯誤實現
1、循環List
查找所有有效節點
循環List,刪除其中當前編輯id的節點,對當前id的子節點遞歸調用該方法
錯誤描述
List循環過程中不能對當前List做add/remove操作,否則會拋出異常
2、循環Iterator
使用List的Iterator進行循環
用Iterator.remove()進行刪除【該方法可以很好的對List的元素進行操作,若是單層循環,推薦使用】
錯誤描述
該方法當遇到遞歸時,內層遞歸刪除節點,外層的List仍然會拋出異常
解決方法
循環List,取出要刪除的節點列表並返回給外層遞歸,最終獲取所有要刪除的元素,在最外層循環刪除List中的節點