关系型数据库树型结构非递归思路=哈希表

IdentityTreeVo

@ApiModelProperty("身份id")                                                                               
private Long identityId;                                                                                  
                                                                                                          
@ApiModelProperty("身份编号")                                                                             
private String number;                                                                                    
                                                                                                          
@ApiModelProperty("身份名称")                                                                             
private String name;                                                                                      
                                                                                                          
@ApiModelProperty("子身份")                                                                               
private List<IdentityTreeVo> subIdentity;                                                                 
                                                                                                          
@JsonIgnore                                                                                               
private Long parentId;                                                                                    
                                                                                                          
@JsonIgnore                                                                                               
private Integer level;                                                                                    
                                                                                                          
@JsonIgnore                                                                                               
private String path;    

identity 表

      `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `identity_no` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '身份编号',
      `identity_name` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '身份名称',
      `parent_id` bigint(11) NOT NULL DEFAULT 0 COMMENT '父级id',
      `path` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '身份路径',

1.查出所有身份对象集合

2.遍历身份对象集合

2.1 找到这个身份的父身份

2.2 将这个身份饮用指向父身份的子节点

范围:树的身份最多为四层,也就是父子树深最多为4.

遍历身份集合为O(n),如果能找到身份的父身份为O(1),则时间复杂度为O(1)。

综上所述,需要利用哈希表。

//1.查出所有身份集合


List <IdentityTreeVo> nodes = 查询SQL结果集并映射();

```

2.构造Map对象

```java
Map <IdentityTreeVo> map = new HashMap<>();

for(IdentityTreeVo node : nodes){

	map.put(node.getId(),node);

}
```
//3.遍历身份对象集合
```java
for(IdentityTreeVo node : nodes){
	Long parentId = node.parentId();
	IdentityTreeVo parentNode = map.get(parentId);
	parentNode.subIdentity.add(node);
	map.remove(node);//释放空间
}
```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值