问题场景的需求描述:
- 根据数据库中具有父子关系的部门数据,构建一个树形的数据结构。
- 部门层级不确定。
- 采用递归方法来实现。
- 执行效率高。
- Java代码实现。
说明:豆包大语言模型生成如下Java示例代码,不保证如下代码能够正常无误运行,主要提供此类问题的程序设计思路,抛转引玉。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Department {
private int id;
private String name;
private Department parent;
private List<Department> children;
public Department(int id, String name) {
this.id = id;
this.name = name;
this.children = new ArrayList<>();
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public Department getParent() {
return parent;
}
public void setParent(Department parent) {
this.parent = parent;
}
public List<Department> getChildren() {
return children;
}
public void addChild(Department child) {
children.add(child);
}
public static Department buildTree(List<Department> departments) {
Map<Integer, Department> departmentMap = new HashMap<>();
for (Department department : departments) {
departmentMap.put(department.getId(), department);
}
return buildTreeRecursive(departmentMap, null);
}
private static Department buildTreeRecursive(Map<Integer, Department> departmentMap, Department parent) {
List<Department> children = new ArrayList<>();
for (Department department : departmentMap.values()) {
if (department.getParent() == parent) {
children.add(department);
department.setParent(parent);
}
}
Department currentDepartment;
if (parent == null) {
currentDepartment = departmentMap.get(children.get(0).getId());
} else {
currentDepartment = parent;
}
for (Department child : children) {
currentDepartment.addChild(buildTreeRecursive(departmentMap, child));
}
return currentDepartment;
}
}
推荐:项目实战应用中推荐使用更加灵活的Java最好用的开源三方脚手架Hutool:
树结构工具-TreeUtil
已读懂上面代码的同学请忽略以下内容,有疑问的同学,请阅读下面增加注释说明代码,希望能对你有帮助:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Department {
// 部门的 ID
private int id;
// 部门的名称
private String name;
// 部门的父部门
private Department parent;
// 部门的子部门列表
private List<Department> children;
public Department(int id, String name) {
this.id = id;
this.name = name;
this.children = new ArrayList<>();
}
// 获取部门的 ID
public int getId() {
return id;
}
// 获取部门的名称
public String getName() {
return name;
}
// 获取部门的父部门
public Department getParent() {
return parent;
}
// 设置部门的父部门
public void setParent(Department parent) {
this.parent = parent;
}
// 获取部门的子部门列表
public List<Department> getChildren() {
return children;
}
// 向子部门列表中添加子部门
public void addChild(Department child) {
children.add(child);
}
// 构建树形结构的方法
public static Department buildTree(List<Department> departments) {
// 用于存储部门的映射
Map<Integer, Department> departmentMap = new HashMap<>();
for (Department department : departments) {
// 将部门添加到映射中
departmentMap.put(department.getId(), department);
}
// 递归构建树形结构的方法
return buildTreeRecursive(departmentMap, null);
}
// 递归构建树形结构的具体实现
private static Department buildTreeRecursive(Map<Integer, Department> departmentMap, Department parent) {
// 子部门列表
List<Department> children = new ArrayList<>();
for (Department department : departmentMap.values()) {
// 如果部门的父部门是指定的父部门
if (department.getParent() == parent) {
// 将其添加到子部门列表中
children.add(department);
// 设置部门的父部门
department.setParent(parent);
}
}
// 当前部门
Department currentDepartment;
if (parent == null) {
// 如果父部门为空,则获取子部门列表中的第一个部门作为当前部门
currentDepartment = departmentMap.get(children.get(0).getId());
} else {
// 否则,将父部门作为当前部门
currentDepartment = parent;
}
for (Department child : children) {
// 递归添加子部门
currentDepartment.addChild(buildTreeRecursive(departmentMap, child));
}
return currentDepartment;
}
}
网友评论