java map 写法_Java 基本的递归写法

1.首先我们得有一个树状结构的表,类似这种结构。必须得有 id,pid  其他的根据需要来。

f37e5b4624f63431db60ca3da7d19df9.png

我们叫它treeTbl表吧。这里pid为0的表示是顶级节点。

2.接着select * from treeTbl ,并将得到的list 转换成一个Map集合,

key 为 pid ,value 为 子元素对象集合或者子元素id集合之类的都可以,根据需要。

我这里只需要id,所以是定义为了List类型。

Map> map=new HashMap>();

for(Object[] obj : list)

{

String id=obj[0].toString();

String pid=obj[1].toString();

if(map!=null && map.get(pid)!=null){

map.get(pid).add(dic_id);

}else{

List list_tmp=new ArrayList();

list_tmp.add(id);

map.put(pid,list_tmp);

}

}

3.递归遍历,说明在注释中

//最终得到的子孙集合

List idList=new ArrayList();

/*

这个pid的值根据需要来,

如果要获取整棵树,这里就填根节点的id,treeTbl表中的根节点的 id 为 0

如果是获取指定父级节点下的所有子孙节点,就填该父节点的 id 值

*/

List chidrenList=map.get(pid);

/*

上面得到的chidrenList仅仅是底下一层的节点集合,也就是说只包含了子节点,未包含子节点下的所有子孙节点

如果变量pid表示第一层的话,这里我们从第二层开始递归

也就是不停的寻找下一层下一层下一层……直到不存在下一层为止

如何判断有无下一层呢,之前创建好的HashMap已存好父子关系,用它来判断就好

*/

for(String id : childrenList){

//用于递归的方法,只有把 id 下的所有子孙节点全部存入idList,才会进行下一轮循环

getChildrens(map, id ,idList);

}

//将之前第一层子节点也加入进来(这个地方根据需要来)

idList.addAll(chidrenList);

private void getChildrens(Map> map,String id,List idList)

{

//查询当前id下的子级的集合

List list=map.get(id);

//如果list不为空,则表示该id下还有子id,重新调用当前方法进行递归查询

if(list!=null && list.size()>0){

for(String id2 : list){

//存入集合

idList.add(id2);

//再查一次

getChildrens(map, id2, idList);

}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值