千家信息网

java 中怎么生成一个树形结构

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,java 中怎么生成一个树形结构,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。树形结构是非常常见的数据结构,生成树形结构
千家信息网最后更新 2026年11月02日java 中怎么生成一个树形结构

java 中怎么生成一个树形结构,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

树形结构是非常常见的数据结构,生成树形结构的方法比较常见的有递归,for循环,不管使用什么方法,如果能很好地利用内存来合理地添加树节点,则能极大提高效率

测试代码如下:

public class TestTree {                public static void main(String[] args) {                C3p0Jdbc jdbc = new C3p0Jdbc();                String sql = "SELECT code value,up_code upCode,name label,level FROM test_table WHERE level < 4 ORDER BY level";                JSONArray arr = jdbc.query(sql);                // 先将数据循环放入新建的map中                Map treeMap = new HashMap<>();                int length = arr.size();                long t1 = System.currentTimeMillis();                for (int i = 0; i < length; i++) {                        String key = arr.getJSONObject(i).getString("value");                        treeMap.put(key, arr.getJSONObject(i));                }                long t2 = System.currentTimeMillis();                System.out.println("循环用时:" + (t2 - t1) + "ms");                JSONArray new_tree = new JSONArray();                // 再使用双层for循环,根据判断条件,将符合条件的节点数据添加到树形结构中                for (int i = 0; i < length; i++) {                        JSONObject parent = arr.getJSONObject(i);                        String key = parent.getString("value");                        int level = parent.getIntValue("level");                        // 这是唯一一处需要 new 对象的地方                        JSONArray children = new JSONArray();                        for (int j = 0; j < length; j++) {                                JSONObject child = arr.getJSONObject(j);                                String childKey = child.getString("value");                                String upCode = child.getString("upCode");                                if (upCode.equals(key)) {                                        children.add(treeMap.get(childKey));                                }                        }                        parent.put("children", children);                        if (level == 1) {                                new_tree.add(parent);                        }                }                                long t3 = System.currentTimeMillis();                System.out.println("第二次遍历用时:" + (t3 - t2) + "ms");                System.out.println("全过程用时:" + (t3 - t1) + "ms");        }        }

在for循环中务必要减少new 对象的次数,New 对象是很耗时的操作,不仅仅是 new 对象会很耗时,其它操作比如将一个 object 转为 jsonarray 或 json 也会很耗时,因为这种操作修改了内存中对象的引用地址,测试代码中最优势的地方就是将所有的对象都加载到map中,在new_tree.add(parent)的操作时是直接将parent对象的内存引用地址添加到了new_tree中,所以效率非常快,我的测试数据是3227条国内的省市区县数据,全过程用时在600~850 ms之间 效果如图:

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

对象 结构 数据 循环 树形 内存 测试 生成 代码 全过程 地址 地方 效率 方法 条件 节点 帮助 清楚 不仅仅 之间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海卓越科技互联网 江苏根荣互联网科技 互联网金融监管科技数据 北京互联网科技公司 互联网医疗科技 科技服务与互联网 互联网 科技创新 狮子座互联网科技有限公司 赫美联合互联网科技 上海万想互联网科技 顺网科技2021年互联网排名 海南购全球互联网科技 成都仁贤领冠互联网科技有限公司 中盈科技互联网信息有限公司 互联网经济与金融科技 山东星卡互联网科技有限公司官网 小米互联网科技园入驻 富国互联网金融科技混合基金 互联网科技年终奖 中国互联网公司的科技投入 互联网科技工作委员会 科技制造互联网公司 成都狮子座互联网科技 多迪互联网科技有限公司 科技伦理 互联网公司 北京大学互联网科技怎么样 电子科技大学互联网创业大赛 工业互联网等科技实现智能化赋能 互联网的科技体现在哪里 盐城市攀科互联网科技有限公司
0