Java 中树结构的组装分享

本文介绍了在Java项目中如何组装部门树结构,重点讨论了递归、双层for循环和map遍历的方法。通过性能测试,发现map遍历在效率上明显优于双层for循环,推荐使用map遍历构建树结构,代码简洁且易于维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

项目中有一个部门树的展示需求,组装树结构这个业务场景十分常见,相信每一个从事 Java 开发的同行几乎都遇到过,本篇简单分享一下树结构的组装。

树结构数据模型

数据模型示例如下:

@Data
public class DepartmentPersonnelTreeVO {
   

    @ApiModelProperty("部门名称")
    private String deptName;

    @ApiModelProperty("部门ID")
    private String deptId;

    @ApiModelProperty("父级部门ID")
    private String parentId;

    @ApiModelProperty("子部门节点")
    private List<DepartmentPersonnelTreeVO> children = new ArrayList<>();

}

树结构数据模型分析

树结构一般有三个必备字段,如下:

  • deptId:示例中描述为部门 id,这是树结构的一个必备字段,一般是当前节点 id,同时也是当前节点的子节点的 parentId。
  • parentId:示例中描述为父级部门 id,很好理解也是树结构中的一个必备字段,构造父子关系使用。
  • children:示例中描述为子部门节点,通用的说发就是当前节点的子节点,也是一个必备字段。

树结构组装,其实就是从数据库取出一组数据,去找到他们之间的父子关系,通畅都会需要遍历处理,以下我们分享递归、双层 for 循环、map 遍历构建树结构。

递归

递归就是从顶级节点一直往下查询,期间需要不停地查询数据库,不推荐递归来组装树结构,这里也就不做演示了。

双层 for 循环

外层每循环一次,就需要内层循环全部数据,去跟外层对比,是否有外层当前循环到的节点的子节点,代码如下:

rivate List<DepartmentPersonnelTreeVO> forBuildTree(List<DepartmentPersonnelTreeVO> departmentPersonnelList) {
   
        // 结果集
        List<DepartmentPersonnelTreeVO> departmentPersonnelTree = new ArrayList<>();
        for (DepartmentPersonnelTreeVO departmentPersonnelTreeVO : departmentPersonnelL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值