问下大家 什么算法可以快速将上面的数据处理成下面的格式。
全部评论
答案无法设置代码格式,复制到 ide 里凑合看吧:
```java
public class TableSerializer {
@Test
void tableSerializerTest() {
List<Address> addresses = new ArrayList<>();
addresses.addAll(Arrays.asList(new Address("1", "北京市", 1, "0",new ArrayList<>()),
new Address("2", "朝阳区", 2, "1",new ArrayList<>()),
new Address("3", "望京街道", 3, "2",new ArrayList<>()),
new Address("4", "海淀区", 2, "1",new ArrayList<>())));
TableSerializer serializer = new TableSerializer();
List<Address> serializedAddresses = serializer.serialize(addresses);
Gson gson = new Gson();
System.out.println(gson.toJson(serializedAddresses));
}
public List<Address> serialize(List<Address> addresses) {
HashMap<String, List<Address>> idMap = new HashMap<>();
ArrayList<Address> res = new ArrayList<>();
for (Address address : addresses) {
idMap.putIfAbsent(address.getPid(), new ArrayList<>());
idMap.get(address.getPid()).add(address);
}
res.addAll(idMap.get("0"));
for (Address address : addresses) {
address.children.addAll(Optional
.ofNullable(idMap.get(address.getId()))
.orElseGet(()->new ArrayList<>()));
}
return res;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
static class Address {
private String id;
private String name;
private Integer level;
private String pid;
private List<Address> children;
}
}
```
<div class="nc-feed-reply-imgs-slideshow"><img src="https://uploadfiles.nowcoder.com/images/20220606/662788738_1654510689417/A33BB872EA8DEC29F376514C85BD0CC3" alt="image.png" width="1836" height="1872"><img src="https://uploadfiles.nowcoder.com/images/20220606/662788738_1654510711424/E76BE1EDABD7F56477F6147129068E17" alt="image.png" width="1422" height="1412"></div>
数据结构 树的应用
最好想到的就是递归,然后是拿循环做
数组转树一般是用map作一个以id为属性的映射,例如:{
1:{ID:1....,children:[]},
2:{ID:2....,children:[]}
......
}
遍历数组元素,判断pid是否作为map映射的对象属性,若存在则放入map[pid].children中,最后根据地址引用的特点就会将各个元素串起来变成结果了
这个要构建树的
地柜压
map,队列,递归,总得来说map>队列>递归,构造树的方案用map可以实现双n,用队列时间复杂度不定,最优n,最差n2,递归最差,n2,且递归深度大消耗的内存也大
这个是不是postman调试接口里面的json格式啊
树
hash + 引用
只能想到建一个类,按照固定格式把数据扫描到对象里面去,然后用hashmap根据id存起来,然后重写toString,每次tostring中会再调用含有children的toString就是要记得判断一下是否还有children。我这个方法偏应用,比较简单,但是好像看大家都是在说算法。所以不知道自己这个方法能不能帮到你。
都是算法大佬啊
面试遇到过,没做出来😅
递归
递归
百度 : 数组转树形结构
标准答案
这不是数组转树吗,直接递归就行了
你可以参考一下vue里的父子之间的传值,不同的页面调用不同的数据,父子之间的值是可以传递的
有开源json框架的,比如腾讯的rapid json,瞅瞅一用就行
这是json吧,可以写一段代码自己转一下
相关推荐
点赞 评论 收藏
分享