使用遞歸算法結(jié)合數(shù)據(jù)庫解析成Java樹形結(jié)構(gòu)的代碼解析
1、準(zhǔn)備表結(jié)構(gòu)及對(duì)應(yīng)的表數(shù)據(jù)
a、表結(jié)構(gòu):
create table TB_TREE ( CID NUMBER not null, CNAME VARCHAR2(50), PID NUMBER //父節(jié)點(diǎn) )
b、表數(shù)據(jù):
insert into tb_tree (CID, CNAME, PID) values (1, '中國', 0); insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1); insert into tb_tree (CID, CNAME, PID) values (3, '廣東省', 1); insert into tb_tree (CID, CNAME, PID) values (4, '上海市', 1); insert into tb_tree (CID, CNAME, PID) values (5, '廣州市', 3); insert into tb_tree (CID, CNAME, PID) values (6, '深圳市', 3); insert into tb_tree (CID, CNAME, PID) values (7, '海珠區(qū)', 5); insert into tb_tree (CID, CNAME, PID) values (8, '天河區(qū)', 5); insert into tb_tree (CID, CNAME, PID) values (9, '福田區(qū)', 6); insert into tb_tree (CID, CNAME, PID) values (10, '南山區(qū)', 6); insert into tb_tree (CID, CNAME, PID) values (11, '密云縣', 2); insert into tb_tree (CID, CNAME, PID) values (12, '浦東', 4);
2、TreeNode對(duì)象,對(duì)應(yīng)tb_tree
public class TreeNode implements Serializable { private Integer cid; private String cname; private Integer pid; private List nodes = new ArrayList(); public TreeNode() { } //getter、setter省略 }
3、測試數(shù)據(jù)
public class TreeNodeTest { @Test public void loadTree() throws Exception{ System.out.println(JsonUtils.javaToJson(recursiveTree(1))); } /** * 遞歸算法解析成樹形結(jié)構(gòu) * * @param cid * @return * @author jiqinlin */ public TreeNode recursiveTree(int cid) { //根據(jù)cid獲取節(jié)點(diǎn)對(duì)象(SELECT * FROM tb_tree t WHERE t.cid=?) TreeNode node = personService.getreeNode(cid); //查詢cid下的所有子節(jié)點(diǎn)(SELECT * FROM tb_tree t WHERE t.pid=?) List childTreeNodes = personService.queryTreeNode(cid); //遍歷子節(jié)點(diǎn) for(TreeNode child : childTreeNodes){ TreeNode n = recursiveTree(child.getCid()); //遞歸 node.getNodes().add(n); } return node; } }
輸出的json格式如下:
{ "cid": 1, "nodes": [ { "cid": 2, "nodes": [ { "cid": 11, "nodes": [ ], "cname": "密云縣", "pid": 2 } ], "cname": "北京市", "pid": 1 }, { "cid": 3, "nodes": [ { "cid": 5, "nodes": [ { "cid": 7, "nodes": [ ], "cname": "海珠區(qū)", "pid": 5 }, { "cid": 8, "nodes": [ ], "cname": "天河區(qū)", "pid": 5 } ], "cname": "廣州市", "pid": 3 }, { "cid": 6, "nodes": [ { "cid": 9, "nodes": [ ], "cname": "福田區(qū)", "pid": 6 }, { "cid": 10, "nodes": [ ], "cname": "南山區(qū)", "pid": 6 } ], "cname": "深圳市", "pid": 3 } ], "cname": "廣東省", "pid": 1 }, { "cid": 4, "nodes": [ { "cid": 12, "nodes": [ ], "cname": "浦東", "pid": 4 } ], "cname": "上海市", "pid": 1 } ], "cname": "中國", "pid": 0 }
總結(jié)
以上所述是小編給大家介紹的使用遞歸算法結(jié)合數(shù)據(jù)庫解析成Java樹形結(jié)構(gòu)的代碼解析,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Java遞歸遍歷樹形結(jié)構(gòu)的實(shí)現(xiàn)代碼
- 使用遞歸刪除樹形結(jié)構(gòu)的所有子節(jié)點(diǎn)(java和mysql實(shí)現(xiàn))
- Java創(chuàng)建樹形結(jié)構(gòu)算法實(shí)例代碼
- java實(shí)現(xiàn)省市區(qū)轉(zhuǎn)換成樹形結(jié)構(gòu)
- Java實(shí)現(xiàn)樹形結(jié)構(gòu)的示例代碼
- Java數(shù)據(jù)封裝樹形結(jié)構(gòu)代碼實(shí)例
- java轉(zhuǎn)樹形結(jié)構(gòu)工具類詳解
- 詳解Java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)的兩種方式
- Java接口返回省市區(qū)樹形結(jié)構(gòu)的實(shí)現(xiàn)
相關(guān)文章
SpringBoot實(shí)現(xiàn)多文件上傳的詳細(xì)示例代碼
文件上傳中并沒有什么太多的知識(shí)點(diǎn),下面這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)現(xiàn)多文件上傳的詳細(xì)示例,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03Java AbstractMethodError案例分析詳解
這篇文章主要介紹了Java AbstractMethodError案例分析詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Java多線程之volatile關(guān)鍵字及內(nèi)存屏障實(shí)例解析
volatile是JVM提供的一種最輕量級(jí)的同步機(jī)制,因?yàn)镴ava內(nèi)存模型為volatile定義特殊的訪問規(guī)則,使其可以實(shí)現(xiàn)Java內(nèi)存模型中的兩大特性:可見性和有序性。這篇文章主要介紹了Java多線程之volatile關(guān)鍵字及內(nèi)存屏障,需要的朋友可以參考下2019-05-05Java中將File轉(zhuǎn)化為MultipartFile的操作
這篇文章主要介紹了Java中將File轉(zhuǎn)化為MultipartFile的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10Java時(shí)區(qū)轉(zhuǎn)換及Date類實(shí)現(xiàn)原理解析
這篇文章主要介紹了Java時(shí)區(qū)轉(zhuǎn)換及Date類實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器
這篇文章主要為大家詳細(xì)介紹了Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器,文中通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-06-06