我有一個實體 PropTemplateItem{id,名稱,父節點,模版id},父節點為root是定義為根節點。
例如數據:
001,顏色,root,123
002,白色,001,123
003,紅色,001,123
004,配置,root,123
005,低配,004,123
006,高配,004,123
自己定義一個model(PropTemplateItemInfo模型,有一個根節點,有多個子節點)
怎樣才能把上述示例數據中存放到自定義模型里?
1.通過數據庫直接查詢(先查出所有根節點,在遍歷所有根節點查詢起所有子節點) 與數據庫交互太多,特別在數據量大了時缺點更明顯
2.通過數據庫查詢出該模版下所有節點,然后通過遍歷這個列表,判斷為root節點的就在這個循環里面在遍歷這個列表,找到父節點id等於這個root節點id的節點,放到自己定義模型里面去。遍歷次數應該是n(list.size())*n 這是最容易想到的辦法,但嵌套的遍歷在數據量大時消耗的性能就比較高了
3.通過數據庫查詢出該模版下所有節點,通過map來存放篩選結果,遍歷次數就只有n(list.size())*2
代碼如下
第一次遍歷這個列表時,找到所有root節點,放在map中,map的key就是他的id,然后新建一個PropTemplateItemInfo對象,把他的root節點放進去。
第二次遍歷這個列表時,判斷map里面是否存在這個key,如果存在,就把這個對象從map中取出來,把他的子節點的值add進那個map。
我們最終要返回圖中名為infoList的對象,因為圖中2個循環中全在操作同一個名為tpl的對象,所以infoList中的tpl對象也會隨之變化。
如有不足,請大家分享您的看法建議,互相學習,相互提高。