• java后端递归树,机构树,遍历树


       public static void getChildrenList(List<JSONObject> list,JSONObject pJo){
            List<JSONObject> retList=new ArrayList<JSONObject>();
            for(JSONObject jo:list){
                if(jo.getString("pid").equals(pJo.getString("id"))){
                    retList.add(jo);
                    jo.put("children", getChildrenList(list, jo));
                }
            }
            //return retList;
            pJo.put("children",retList);
        }
        
        

    第一种,方法循环一次,比较耗费内存,不建议使用

    public static void main(String[] args) {
    
                    //拼装数据
            List<JSONObject> list=new ArrayList<JSONObject>();
            list.add(JSONObject.parseObject("{id:'1',name:'n1',pid:'-1'}"));
            list.add(JSONObject.parseObject("{id:'2',name:'n1',pid:'-1'}"));
            list.add(JSONObject.parseObject("{id:'3',name:'n1',pid:'-1'}"));
            
            list.add(JSONObject.parseObject("{id:'1-1',name:'n1-1',pid:'1'}"));
            list.add(JSONObject.parseObject("{id:'2-1',name:'n2-1',pid:'2'}"));
            list.add(JSONObject.parseObject("{id:'3-1',name:'n3-1',pid:'3'}"));
            list.add(JSONObject.parseObject("{id:'1-2',name:'n1-2',pid:'1'}"));
            list.add(JSONObject.parseObject("{id:'2-2',name:'n2-2',pid:'2'}"));
            list.add(JSONObject.parseObject("{id:'3-2',name:'n3-2',pid:'3'}"));
            list.add(JSONObject.parseObject("{id:'1-3',name:'n1-3',pid:'1'}"));
            list.add(JSONObject.parseObject("{id:'2-3',name:'n2-3',pid:'2'}"));
            list.add(JSONObject.parseObject("{id:'3-3',name:'n3-3',pid:'3'}"));
            
            list.add(JSONObject.parseObject("{id:'1-1-1',name:'n1-1-1',pid:'1-1'}"));
            list.add(JSONObject.parseObject("{id:'1-1-2',name:'n1-1-2',pid:'1-1'}"));
            list.add(JSONObject.parseObject("{id:'1-1-3',name:'n1-1-3',pid:'1-1'}"));        
            
            //递归  根节点
            JSONObject tJo=JSONObject.parseObject("{id:'-1',name:'根节点'}");
            //tJo.put("children",getChildrenList(list, tJo));
            System.out.println(tJo.toJSONString());
            
            
            //一次循环 方法,比较好内存不建议使用
            Map<String,List<JSONObject>> map1=new HashMap<String, List<JSONObject>>();
            for(JSONObject jo:list){
                String pid=jo.getString("pid");
                String id=jo.getString("id");
                if(!map1.containsKey(pid)){//不存在
                    map1.put(pid, new ArrayList<JSONObject>());
                }
                map1.get(pid).add(jo);
                
                if(!map1.containsKey(id)){
                    map1.put(id, new ArrayList<JSONObject>());
                }
                jo.put("children", map1.get(id));
            }
            JSONObject tJo2=JSONObject.parseObject("{id:'-1',name:'根节点'}");
            tJo2.put("children", map1.get("-1"));
            System.out.println(tJo2.toJSONString());
            
        }
        
        

    第二种方法,两次循环,建议使用,节省内存

    public static void main(String[] args) {
    
                    //拼装数据
            List<JSONObject> list=new ArrayList<JSONObject>();
            list.add(JSONObject.parseObject("{id:'1',name:'n1',pid:'-1'}"));
            list.add(JSONObject.parseObject("{id:'2',name:'n1',pid:'-1'}"));
            list.add(JSONObject.parseObject("{id:'3',name:'n1',pid:'-1'}"));
            
            list.add(JSONObject.parseObject("{id:'1-1',name:'n1-1',pid:'1'}"));
            list.add(JSONObject.parseObject("{id:'2-1',name:'n2-1',pid:'2'}"));
            list.add(JSONObject.parseObject("{id:'3-1',name:'n3-1',pid:'3'}"));
            list.add(JSONObject.parseObject("{id:'1-2',name:'n1-2',pid:'1'}"));
            list.add(JSONObject.parseObject("{id:'2-2',name:'n2-2',pid:'2'}"));
            list.add(JSONObject.parseObject("{id:'3-2',name:'n3-2',pid:'3'}"));
            list.add(JSONObject.parseObject("{id:'1-3',name:'n1-3',pid:'1'}"));
            list.add(JSONObject.parseObject("{id:'2-3',name:'n2-3',pid:'2'}"));
            list.add(JSONObject.parseObject("{id:'3-3',name:'n3-3',pid:'3'}"));
            
            list.add(JSONObject.parseObject("{id:'1-1-1',name:'n1-1-1',pid:'1-1'}"));
            list.add(JSONObject.parseObject("{id:'1-1-2',name:'n1-1-2',pid:'1-1'}"));
            list.add(JSONObject.parseObject("{id:'1-1-3',name:'n1-1-3',pid:'1-1'}"));
            
            
            //递归
            JSONObject tJo=JSONObject.parseObject("{id:'-1',name:'根节点'}");
            //tJo.put("children",getChildrenList(list, tJo));
            System.out.println(tJo.toJSONString());
            
            
            
            
            
            
            //两次循环 方法,建议使用
            Map<String,List<JSONObject>> map=new HashMap<String, List<JSONObject>>();
            for(JSONObject jo:list){
                String pid=jo.getString("pid");
                if(!map.containsKey(pid)){//不存在
                    map.put(pid, new ArrayList<JSONObject>());
                }
                map.get(pid).add(jo);
            }
            
            for(JSONObject jo:list){
                String id=jo.getString("id");
                if(map.containsKey(id)){
                    jo.put("children", map.get(id));
                }
            }
            JSONObject tJo1=JSONObject.parseObject("{id:'-1',name:'根节点'}");
            tJo1.put("children", map.get("-1"));
            System.out.println(tJo1.toJSONString());
            
            }
        
        
  • 相关阅读:
    域hash值破解的总结经验
    centos下安装ngnix+php+mysql服务
    方程式EQGRP_Lost_in_Translation工具之fb.py
    Bypass AV meterpreter免杀技巧
    跟我一起创建栈
    vue-cli3使用yarn run build打包找不到路径
    使用vue-cli3快速适配H5项目
    关于判断是安卓还是ios环境跳转下载页
    跟我一起学习webpack输出动态HTML(三)
    跟我一起学习webpack使用配置文件(二)
  • 原文地址:https://www.cnblogs.com/ComputerVip/p/12022061.html
Copyright © 2020-2023  润新知