Java遞歸如何正確輸出樹形菜單
更新時間:2020年08月26日 09:01:35 作者:Joker_Ye
這篇文章主要為大家詳細介紹了Java遞歸如何正確輸出樹形菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了java遞歸輸出樹形菜單的具體代碼,供大家參考,具體內(nèi)容如下
首先我們要建立樹節(jié)點的類:
package com.tree; public class Node { private Integer id; private Integer parentId; private String name; private String link; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getParentId() { return parentId; } public void setParentId(Integer parentId) { this.parentId = parentId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLink() { return link; } public void setLink(String link) { this.link = link; } }
輸出樹形菜單類:
package com.tree; import java.util.ArrayList; import java.util.List; public class Tree { private StringBuffer html = new StringBuffer(); private List<Node> nodes; public Tree(List<Node> nodes){ this.nodes = nodes; } public String buildTree(){ html.append("<ul>"); for (Node node : nodes) { Integer id = node.getId(); if (node.getParentId() == null) { html.append("\r\n<li id='" + id + "'>" + node.getName()+ "</li>"); build(node); } } html.append("\r\n</ul>"); return html.toString(); } private void build(Node node){ List<Node> children = getChildren(node); if (!children.isEmpty()) { html.append("\r\n<ul>"); for (Node child : children) { Integer id = child.getId(); html.append("\r\n<li id='" + id + "'>" + child.getName()+ "</li>"); build(child); } html.append("\r\n</ul>"); } } private List<Node> getChildren(Node node){ List<Node> children = new ArrayList<Node>(); Integer id = node.getId(); for (Node child : nodes) { if (id.equals(child.getParentId())) { children.add(child); } } return children; } }
然后我們來測試一下:
import java.util.ArrayList; import java.util.List; import cn.com.tree.Node; import cn.com.tree.Tree; public class Test { /** * @param args */ public static void main(String[] args) { List<Node> nodes = new ArrayList<Node>(); Node node1 = new Node(); node1.setId(1); node1.setName("node1"); node1.setParentId(null); node1.setLink(null); nodes.add(node1); Node node11 = new Node(); node11.setId(11); node11.setName("node11"); node11.setParentId(1); node11.setLink(null); nodes.add(node11); Node node111 = new Node(); node111.setId(111); node111.setName("node111"); node111.setParentId(11); node111.setLink(null); nodes.add(node111); Node node12 = new Node(); node12.setId(12); node12.setName("node12"); node12.setParentId(1); node12.setLink(null); nodes.add(node12); Node node2 = new Node(); node2.setId(2); node2.setName("node2"); node2.setParentId(null); node2.setLink(null); nodes.add(node2); Node node21 = new Node(); node21.setId(21); node21.setName("node21"); node21.setParentId(2); node21.setLink(null); nodes.add(node21); Node node3 = new Node(); node3.setId(3); node3.setName("node3"); node3.setParentId(null); node3.setLink(null); nodes.add(node3); Tree tree = new Tree(nodes); System.out.println(tree.buildTree()); } }
輸出的結(jié)果:
<ul> <li id='1'>node1</li> <ul> <li id='11'>node11</li> <ul> <li id='111'>node111</li> </ul> <li id='12'>node12</li> </ul> <li id='2'>node2</li> <ul> <li id='21'>node21</li> </ul> <li id='3'>node3</li> </ul>
瀏覽器效果:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于jdk環(huán)境變量配置以及javac不是內(nèi)部或外部命令的解決
這篇文章主要介紹了關(guān)于jdk環(huán)境變量配置以及javac不是內(nèi)部或外部命令的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01java 數(shù)據(jù)結(jié)構(gòu)與算法 (快速排序法)
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)與算法(快速排序法),,快速排序法是實踐中的一種快速的排序算法,在c++或?qū)ava基本類型的排序中特別有用,下面我們一起進入文章學習更詳細的內(nèi)容吧,需要的朋友可以參考下2022-02-02