一张表存在 id 和 parentId 例如: ["id": 1 ,"parentId" = 0],["id": 2 ,"parentId" = 1],["id": 3 ,"parentId" = 1],["id": 4 ,"parentId" = 3],["id": 5 ,"parentId" = 1] 这种数据用java 从第一层逐层取数
时间: 2023-07-06 15:37:41 浏览: 101
全国行政区划表 包含树形结构 id name parentId格式
4星 · 用户满意度95%
这种数据结构是树形结构,可以通过遍历来逐层获取数据。以下是一个示例代码:
```java
import java.util.ArrayList;
import java.util.List;
public class Tree {
List<Node> nodes;
// 节点类
class Node {
int id;
int parentId;
Node(int id, int parentId) {
this.id = id;
this.parentId = parentId;
}
}
// 构造函数
public Tree(List<Node> nodes) {
this.nodes = nodes;
}
// 根据父节点获取子节点
public List<Node> getChildren(int parentId) {
List<Node> children = new ArrayList<>();
for (Node node : nodes) {
if (node.parentId == parentId) {
children.add(node);
}
}
return children;
}
// 获取指定节点及其子节点
public List<Node> getSubtree(int id) {
List<Node> subtree = new ArrayList<>();
Node node = getNode(id);
if (node != null) {
subtree.add(node);
List<Node> children = getChildren(node.id);
for (Node child : children) {
subtree.addAll(getSubtree(child.id));
}
}
return subtree;
}
// 获取指定id的节点
public Node getNode(int id) {
for (Node node : nodes) {
if (node.id == id) {
return node;
}
}
return null;
}
public static void main(String[] args) {
List<Tree.Node> nodes = new ArrayList<>();
nodes.add(new Tree.Node(1, 0));
nodes.add(new Tree.Node(2, 1));
nodes.add(new Tree.Node(3, 1));
nodes.add(new Tree.Node(4, 3));
nodes.add(new Tree.Node(5, 1));
Tree tree = new Tree(nodes);
// 获取第一层数据
List<Tree.Node> firstLayer = tree.getChildren(0);
for (Tree.Node node : firstLayer) {
System.out.println(node.id);
// 获取子节点
List<Tree.Node> children = tree.getChildren(node.id);
for (Tree.Node child : children) {
System.out.println("--" + child.id);
}
}
// 获取第三个节点及其子节点
List<Tree.Node> subtree = tree.getSubtree(3);
for (Tree.Node node : subtree) {
System.out.println(node.id);
}
}
}
```
在上面的代码中,我们定义了一个树形结构的类 `Tree`,其中包括节点类 `Node` 和相关的方法。我们可以通过 `getChildren` 方法获取指定父节点的子节点,通过 `getSubtree` 方法获取指定节点及其子节点。在 `main` 方法中,我们可以演示如何逐层获取数据,以及如何获取指定节点及其子节点。
阅读全文