嗯。。。兩種構造樹型資料的方法
先貼實體類
/**
* 實體類
* * @classname model
* @description todo
* @author wucx
* @time 2018-02-11 09:34
*/public class model
public string getid()
public void setid(string id)
public string getpid()
public void setpid(string pid)
public listgetchildren()
public void setchildren(listchildren)
}
然後貼第一種方法
/**
* 第一種方法,迴圈使用
* * 原理:兩層迴圈
* 第一層迴圈:先取出第乙個節點
* 標記是否為子節點 第二層迴圈:
* 取出乙個節點,進行判斷,第一層取出的節點是否為第二個節點的子節點,
* 若是,則新增進第二個節點中,第二層迴圈結束,第一層迴圈取下乙個節點
* 若不是,則第二層迴圈取下乙個節點,然後繼續判斷
* 直到成功或第二層迴圈迴圈結束
* 然後判斷標記是否觸發,若沒有,則說明為一層節點,新增
* * @author wucx
* @title listtotree
* @param list---原資料(未轉換的資料,可以從資料庫中查出)
* @param pid---該節點及該節點下的資料不返回
* @return
*/private listlisttotree(listlist, string pid)
for (model n1 : list)
n2.getchildren().add(n1);
}break;}}
// 如果標記為true,則代表為第一層節點之一,新增
if (mark)}}
return tree;
};
第二種方法
/**
* 第二種方法,利用資料庫來建樹
* 原理:根據父節點來查詢其全部子節點
* 然後將其放置在其子節點中
* 並繼續遞迴其子節點
* 直到返回空
* 很浪費資料庫的資源,但是時間複雜度很低
* @author wucx
* @title gettree
* @description todo
* @time 2018-02-11 10:14
* @param pid
* @return
*/private listgettree(string pid)
return tree;
}//模擬資料庫中查詢方法
private listgetmodels(string pid)
然後順便再貼乙個從樹中查子節點的方法
/**
* 在子節點中查詢節點
* * @author wucx
* @title findmodelbymodel
* @param parent---已經樹形好的父節點
* @param id---需要查詢的節點id
* @return
*/private model findmodelbymodel(model parent, string id)
// 獲取子節點
listchildren = parent.getchildren();
for (model n : children)
// 否者查詢其的子節點
listc = n.getchildren();
// 如果子節點不為空,則繼續遞迴子節點中查詢該特定節點
if (c != null && !c.isempty() && c.size() != 0)}}
// 如果返回的是這個,則說明沒有找到,返回空
return model;
}
原理什麼的在注釋中都有,就懶得貼出來了,然後這些是根據寫的專案中剝離出來的小demo,只是大概體現一些思路和原理,demo是隨手寫的,不保證能用,還有查詢的時候可以根據需要自行新增查詢的字段,當然,如果有一些更好的構造樹的方法歡迎介紹 JAVASE學習筆記之泛型
建立集合同時指定集合儲存的資料型別 指定資料型別時,要麼指定左邊,要麼兩邊都執行相同的資料型別 在jdk1.7之前,必須兩邊都要指定並且要相同的資料型別 在jdk1.7之後,指定左邊即可 在泛型中沒有多型的概念 將執行時錯誤轉換為編譯期錯誤,增強了集合的安全性。省去了資料型別強制轉換的麻煩。jdk1...
C 學習筆記之泛型
拆箱和裝箱從值型別轉換為引用型別為裝箱,把引用型別轉換為值型別為拆箱 裝箱和拆箱很容易使用,但是效能損失比較大,尤其是遍歷許多項的時候。list不使用物件,在使用時定義型別 var list new list list.add 44 no boxing int item list 0 mo unbo...
C 學習筆記之泛型委託
求陣列的最大值 普通委託寫法如下 using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace 求陣列的最大值 匿名函式...