最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java遞歸遍歷樹(shù)形結(jié)構(gòu)的實(shí)現(xiàn)代碼

 更新時(shí)間:2020年11月17日 14:47:29   作者:郝世海  
這篇文章主要介紹了Java遞歸遍歷樹(shù)形結(jié)構(gòu)的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

廢話(huà)不多說(shuō)了,直接給大家貼代碼,具體代碼如下所示:

//菜單樹(shù)形結(jié)構(gòu) 
public JSONArray treeMenuList(JSONArray menuList, int parentId) { 
JSONArray childMenu = new JSONArray(); 
for (Object object : menuList) { 
JSONObject jsonMenu = JSONObject.fromObject(object); 
int menuId = jsonMenu.getInt("id"); 
int pid = jsonMenu.getInt("parentId"); 
if (parentId == pid) { 
JSONArray c_node = treeMenuList(menuList, menuId); 
jsonMenu.put("childNode", c_node); 
childMenu.add(jsonMenu); 
} 
} 
return childMenu; 
} 
public static void main(String args[]) { 
MenuCacheService menuCacheService = new MenuCacheService(); 
JSONArray jsonArray = new JSONArray(); 
Menu menu1 = new Menu(); 
menu1.setId(1l); 
menu1.setParentId(0); 
menu1.setLevel(0); 
Menu menu2 = new Menu(); 
menu2.setId(2l); 
menu2.setParentId(0); 
menu2.setLevel(0); 
Menu menu3 = new Menu(); 
menu3.setId(3l); 
menu3.setParentId(2); 
menu3.setLevel(1); 
Menu menu4 = new Menu(); 
menu4.setId(4l); 
menu4.setParentId(2); 
menu4.setLevel(1); 
Menu menu5 = new Menu(); 
menu5.setId(5l); 
menu5.setParentId(4); 
menu5.setLevel(2); 
Menu menu6 = new Menu(); 
menu6.setId(6l); 
menu6.setParentId(1); 
menu6.setLevel(1); 
jsonArray.add(menu1); 
jsonArray.add(menu2); 
jsonArray.add(menu3); 
jsonArray.add(menu4); 
jsonArray.add(menu5); 
jsonArray.add(menu6); 
System.out.print(menuCacheService.treeMenuList(jsonArray,0)); 
}

ps:java實(shí)現(xiàn)樹(shù)的遞歸遍歷(用于實(shí)現(xiàn)折疊菜單)

1.核心算法

package com.zf.tag.dao;
import java.util.ArrayList;
import java.util.List;
import com.zf.tag.entity.dept.Dept;
public class DeptDao extends BaseDao{
public static List<Dept> searchAllDept() throws Exception{
List<Object[]> listAllObject=new ArrayList<Object[]>();
List<Object[]> tmp=new ArrayList<Object[]>();
List<Dept> listAllDept=new ArrayList<Dept>();
String sql="select id,dname,up_did from tbl_dept";
listAllObject=getResult(sql);
for (Object[] row : listAllObject) {
Object[] ro = new Object[3];
ro[0] = row[0];
ro[1] = row[1];
ro[2] = row[2];
tmp.add(row);
}
for (Object[] row : tmp) {
if (null == row[2]) {
Dept d = new Dept();
d.setId(Integer.parseInt(String.valueOf(row[0])));
d.setDname(String.valueOf(row[1]));
listAllDept.add(d);
fomateDept(tmp, d);
}
}
return listAllDept;
}
private static void fomateDept(List<Object[]> tmp, Dept dept) {
for (Object[] row : tmp) {
if ((null != row[2])
&& Integer.parseInt(String.valueOf(row[2])) == dept.getId()) {
Dept d = new Dept();
d.setId(Integer.parseInt(String.valueOf(row[0])));
d.setDname(String.valueOf(row[1]));
List<Dept> list = dept.getChildren();
if (list == null) {
list = new ArrayList<Dept>();
}
list.add(d);
dept.setChildren(list);
fomateDept(tmp, d);
}
}
}
}

2.實(shí)體類(lèi)(部門(mén))

package com.zf.tag.entity.dept;
import java.util.List;
public class Dept {
private Integer id;
private String dname;
private List<Dept> children;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public List<Dept> getChildren() {
return children;
}
public void setChildren(List<Dept> children) {
this.children = children;
}
public String toString(){
return this.getDname();
}
}

以上所述是小編給大家介紹的Java遞歸遍歷樹(shù)形結(jié)構(gòu)的相關(guān)內(nèi)容,希望對(duì)大家有所幫助!

更多精彩內(nèi)容請(qǐng)關(guān)注公眾號(hào)【Java技術(shù)迷】,可以通過(guò)以下二維碼關(guān)注

相關(guān)文章

  • Javassist之一秒理解java動(dòng)態(tài)編程

    Javassist之一秒理解java動(dòng)態(tài)編程

    概述Javassist是一款字節(jié)碼編輯工具,可以直接編輯和生成Java生成的字節(jié)碼,以達(dá)到對(duì).class文件進(jìn)行動(dòng)態(tài)修改的效果。
    2019-06-06
  • Java實(shí)現(xiàn)支付寶之第三方支付寶即時(shí)到賬支付功能

    Java實(shí)現(xiàn)支付寶之第三方支付寶即時(shí)到賬支付功能

    這篇文章主要介紹了Java實(shí)現(xiàn)支付寶之第三方支付寶即時(shí)到賬支付功能的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • SpringBoot?讀取yml文件的多種方式匯總

    SpringBoot?讀取yml文件的多種方式匯總

    這篇文章主要介紹了SpringBoot讀取yml文件的幾種方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • 詳解java開(kāi)發(fā)webservice的幾種方式

    詳解java開(kāi)發(fā)webservice的幾種方式

    webservice的應(yīng)用已經(jīng)越來(lái)越廣泛了,下面介紹幾種在Java體系中開(kāi)發(fā)webservice的方式,有興趣的可以了解一下。
    2016-11-11
  • Java中集合關(guān)系圖及常見(jiàn)操作詳解

    Java中集合關(guān)系圖及常見(jiàn)操作詳解

    這篇文章主要為大家詳細(xì)介紹了Java中集合關(guān)系圖及常見(jiàn)操作,解析Java中的集合類(lèi)型的繼承關(guān)系圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • java繼承學(xué)習(xí)之super的用法解析

    java繼承學(xué)習(xí)之super的用法解析

    本文介紹java繼承super的用法,Java繼承是會(huì)用已存在的類(lèi)的定義作為基礎(chǔ)建立新類(lèi)的技術(shù)新類(lèi)的定義可以增加新的數(shù)據(jù)或者新的功能,也可以使用父類(lèi)的功能,但不能選擇性的繼承父類(lèi) 這種繼承使得復(fù)用以前的代碼非常容易,能夠大大的縮短開(kāi)發(fā)的周期,需要的朋友可以參考下
    2022-02-02
  • Springboot實(shí)現(xiàn)ENC加密的詳細(xì)流程

    Springboot實(shí)現(xiàn)ENC加密的詳細(xì)流程

    在項(xiàng)目開(kāi)發(fā)過(guò)程中,需要配置數(shù)據(jù)庫(kù)連接密碼、Redis密碼、網(wǎng)盤(pán)上傳的AK/SK等敏感信息,都需要保存在配置文件里,或者配置中心,這些信息如果泄露,還是會(huì)造成一定的困擾,下面這篇文章主要給大家介紹了關(guān)于Springboot實(shí)現(xiàn)ENC加密的詳細(xì)流程,需要的朋友可以參考下
    2023-06-06
  • 兩個(gè)小例子輕松搞懂 java 中遞歸與尾遞歸的優(yōu)化操作

    兩個(gè)小例子輕松搞懂 java 中遞歸與尾遞歸的優(yōu)化操作

    這篇文章主要介紹了兩個(gè)小例子輕松搞懂 java 中遞歸與尾遞歸的優(yōu)化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Java多線程 生產(chǎn)者消費(fèi)者模型實(shí)例詳解

    Java多線程 生產(chǎn)者消費(fèi)者模型實(shí)例詳解

    這篇文章主要介紹了Java多線程 生產(chǎn)者消費(fèi)者模型實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 淺談Java list.remove( )方法需要注意的兩個(gè)坑

    淺談Java list.remove( )方法需要注意的兩個(gè)坑

    這篇文章主要介紹了淺談Java list.remove( )方法需要注意的兩個(gè)坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12

最新評(píng)論

蓝山县| 丰县| 铁力市| 乌拉特前旗| 堆龙德庆县| 金湖县| 崇明县| 漳州市| 塔河县| 湖州市| 廉江市| 即墨市| 孝感市| 乃东县| 曲阳县| 辽源市| 新河县| 新乡市| 璧山县| 德昌县| 喀喇沁旗| 城口县| 安岳县| 登封市| 德钦县| 明星| 北辰区| 麦盖提县| 广灵县| 南和县| 长泰县| 江都市| 新密市| 上栗县| 长汀县| 苏尼特左旗| 开化县| 中宁县| 小金县| 新邵县| 萨嘎县|