目录树业务场景的处理方式

对于目录树类型的业务场景,处理方式通常如下:

数据存储

数据库表中每行对应目录树中的一个节点,每行包含当前节点的数据,当前节点的ID,当前节点的父ID(如果父ID为空则作为根目录处理)。

可一次性将表中所有数据取出,也可根据父节点ID取出部分数据。

数据遍历

准备一个数组存储根节点,并准备一个HashMap存储所有非根节点,以节点的父ID作为key,值为数组类型,数组中存储所有父节点为对应key的节点。

遍历所有项目,根节点(通常父ID为null)插入到根节点数组中,非根节点以父ID为key在HashMap中找到对应的数组(如果对应父ID在HashMap中不存在则新建一个空数组),然后将该节点插入到该数组中。

准备一个可重入的proc()函数/方法用于遍历目录树中的所有节点,参数为待遍历的节点数组;开始遍历时使用根节点数组作为参数调用该函数。

proc()函数中遍历参数中给定的节点数组中的每个节点,如果一个节点存在子节点(HashMap中存在key为该节点ID的项目,且值为非空数组),则使用proc()函数遍历该节点对应的子节点。