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);//释放空间
}
```