部门树生成 双重for循环代替递归 java
2022/1/19 17:23:48
本文主要是介绍部门树生成 双重for循环代替递归 java,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
部门树生成 双重for循环代替递归
介绍
业务问题:生成部门树。
第一思路是递归的方式,获取当前部门的所有子部门,接着再去递归子部门。但其实使用for循环也可以做到。
代码:
private List<DeptNode> generateTree(List<Dept> list) { List<DeptNode> nodes = new ArrayList<>(20); for (Dept dept : list) { DeptNode deptNode = new DeptNode(); BeanUtils.copyProperties(dept, deptNode); nodes.add(deptNode); } for (DeptNode deptNode : nodes) { for (DeptNode child : nodes) { if (child.getPid().intValue() == deptNode.getId().intValue()) { List<DeptNode> children = deptNode.getChildren(); if (children == null) { children = Lists.newArrayList(); deptNode.setChildren(children); } children.add(child); } } } List<DeptNode> result = new ArrayList<>(20); for (DeptNode node : nodes) { if (node.getPid().intValue() == 0) { result.add(node); } } return result; }
先将所有部门查出放入到一个列表,接着两次for循环这个列表,在循环中给部门设置每个部门的children子部门。循环完成后,所有的部门的子部门children都已经设置完成。
最后再次循环整个部门列表,只取顶级部门,不直接展示子部门,因为子部门已经被设置到了顶级部门的children中(或者children的children…),所以不需要重复展示。
问题
这种两次for循环方式也有问题。
假如说只需要某部门的子部门,如果使用上面这种方式就要循环所有的部门,把所有部门设置完子部门放入列表后,再从这个列表根据id找到所需要的部门。
而如果使用递归,只需要传入该部门的id,程序就可以先获取该部门的子部门,再根据子部门递归下去。
如果感觉不到区别,考虑极端情况,1000个部门都是顶级部门,要查某部门的子部门信息,两次for循环要100万次,递归只需要1次。
所以要看业务情况使用。
这篇关于部门树生成 双重for循环代替递归 java的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南