论坛首页 入门技术论坛

关于递归的一个问题

浏览 1435 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-01-06   最后修改:2009-01-06
今天写代码的时候,想要得到某个部件下的所有子件的id组合,对应的model是PlanProdInfo,其实就是一个树,产品,部件,子件都在其中存着,parentId为其父件的id.起初代码是这样写的
/**
 * @see 得到某部件下的所有子件id组合
 */
private void getAllChild(String partId, String allChild){
		String sql="select prod.id from PlanProdInfo prod where prod.parentId="+partId;
		List tempList=generalObjectService.findBySql(sql);
		if (tempList != null && tempList.size() > 0) {
			Long id = null ;
			for(int i=0;i<tempList.size();i++){
				id=(Long)tempList.get(i);
				allChild+=id+"," ;
				getAllChild(id.toString(),allChild);
			}
		}
	}

allChild是对象,不是容器,最后还是为空,想后用集合list,修改下是这样:
/**
 * @see 得到某部件下的所有子件id组合
 */
private void getAllChild(String partId, List temp){
		String sql="select prod.id from PlanProdInfo prod where prod.parentId="+partId;
		List tempList=generalObjectService.findBySql(sql);
		if (tempList != null && tempList.size() > 0) {
			Long id = null ;
            String idStr = "" ;
			for(int i=0;i<tempList.size();i++){
				id=(Long)tempList.get(i);
                if(temp != null && temp.size() > 0 && temp.get(0) != null){
					idStr = (String) temp.get(0) ;
				}
                temp.clear();
                temp.add(idStr) ;
                getAllChild(id.toString(),temp);
			}
		}
	}

但是在递归里面在判断list,感觉效率很低,所以,最后直接把所有的id存放在list中,然后循环list,重新组装id,代码如下:
/**
 * @see 得到某部件下的所有子件id组合
 * @param String partId, List temp
 */
private void getAllChild(String partId, List temp){
		String sql="select prod.id from PlanProdInfo prod where prod.parentId="+partId;
		List tempList=generalObjectService.findBySql(sql);
		if (tempList != null && tempList.size() > 0) {
			Long id = null ;
			for(int i=0;i<tempList.size();i++){
				id=(Long)tempList.get(i);
				temp.add(id+",") ;
				getAllChild(id.toString(),temp);
			}
		}
	}

但是感觉这样效率也是很低,请各位指教啊!
   发表时间:2009-01-06  
select name,level
from t_test
connect by prior name = parent
start with name='爷爷'
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics