zoukankan      html  css  js  c++  java
  • 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());
            
            }
        
        
  • 相关阅读:
    python3爬虫--反爬虫应对机制
    mongodb与mysql区别(超详细)
    cookie和session运行机制、区别
    flask轻量级框架入门
    python自定义元类metaclass,约束子类
    MongoDB ObjectId类型 序列化问题
    【python 内置模块】 返回一个规定长度的随机字符串
    使用PyMongo有多重,使用MongoClientwith的实例时必须小心 fork()
    MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。
    分布式文件系统架构HDFS、FastDFS、Haystack
  • 原文地址:https://www.cnblogs.com/ComputerVip/p/12022061.html
Copyright © 2011-2022 走看看