下面是一个Java实现的例子,将一个List转换为多个根节点的树形结构,同时避免死循环和层级限制为10层:\n\njava\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\npublic class ListToTree {\n private static final int MAX_LEVEL = 10;\n\n public static List<Node> convertToTree(List<Node> list) {\n // 创建一个Map,用于存储每个节点的id和对应的节点对象\n Map<Integer, Node> nodeMap = new HashMap<>();\n // 创建一个List,用于存储根节点\n List<Node> roots = new ArrayList<>();\n\n // 遍历list,将每个节点添加到nodeMap中\n for (Node node : list) {\n nodeMap.put(node.getId(), node);\n }\n\n // 遍历list,将每个节点的父节点设置好\n for (Node node : list) {\n int parentId = node.getParentId();\n if (parentId == 0) {\n // 如果节点的parentId为0,表示该节点是根节点\n roots.add(node);\n } else {\n // 获取父节点对象\n Node parent = nodeMap.get(parentId);\n if (parent != null) {\n // 将节点添加到父节点的子节点列表中\n parent.addChild(node);\n }\n }\n }\n\n return roots;\n }\n\n public static void main(String[] args) {\n // 创建一个测试数据集合\n List<Node> list = new ArrayList<>();\n list.add(new Node(1, 0, "Root1"));\n list.add(new Node(2, 1, "Child1.1"));\n list.add(new Node(3, 1, "Child1.2"));\n list.add(new Node(4, 2, "Grandchild1.1.1"));\n list.add(new Node(5, 2, "Grandchild1.1.2"));\n list.add(new Node(6, 3, "Grandchild1.2.1"));\n list.add(new Node(7, 3, "Grandchild1.2.2"));\n\n // 将list转换为多个根节点的树形结构\n List<Node> roots = convertToTree(list);\n\n // 输出树形结构\n for (Node root : roots) {\n printNode(root, 0);\n }\n }\n\n public static void printNode(Node node, int level) {\n StringBuilder sb = new StringBuilder();\n for (int i = 0; i < level; i++) {\n sb.append(" ");\n }\n sb.append(node.getName());\n System.out.println(sb.toString());\n\n List<Node> children = node.getChildren();\n if (children != null) {\n for (Node child : children) {\n printNode(child, level + 1);\n }\n }\n }\n}\n\nclass Node {\n private int id;\n private int parentId;\n private String name;\n private List<Node> children;\n\n public Node(int id, int parentId, String name) {\n this.id = id;\n this.parentId = parentId;\n this.name = name;\n this.children = new ArrayList<>();\n }\n\n public int getId() {\n return id;\n }\n\n public int getParentId() {\n return parentId;\n }\n\n public String getName() {\n return name;\n }\n\n public List<Node> getChildren() {\n return children;\n }\n\n public void addChild(Node child) {\n children.add(child);\n }\n}\n\n\n在上面的示例中,我们创建了一个Node类来表示树的节点。每个节点包含一个id、parentId和name属性,以及一个children列表来存储其子节点。\n\nconvertToTree方法接受一个List参数,其中每个元素都是一个Node对象。首先,我们创建了一个HashMap来存储每个节点的id和对应的节点对象。然后,我们遍历List,将每个节点添加到HashMap中。接下来,我们再次遍历List,为每个节点设置父节点。如果一个节点的parentId为0,则表示该节点是根节点,我们将其添加到根节点列表中。否则,我们通过父节点的id从HashMap中获取父节点对象,并将当前节点添加到父节点的children列表中。\n\n最后,我们调用printNode方法来打印树形结构。该方法使用递归的方式遍历树的节点,并根据节点的层级打印相应的缩进。\n\n注意:在实际使用中,可能需要根据具体的业务需求对Node类进行适当的扩展和修改。此示例仅提供了一个基本的实现思路。

Java 实现 List 转 多根节点树形结构,高效避免死循环和层级限制

原文地址: https://www.cveoy.top/t/topic/pG5N 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录