20180211學習筆記之樹型結構

2021-08-15 13:58:06 字數 2262 閱讀 1736

嗯。。。兩種構造樹型資料的方法

先貼實體類

/**

* 實體類

* * @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 求陣列的最大值 匿名函式...