「java递归查询五层结构」java递归查询层级
今天给各位分享java递归查询五层结构的知识,其中也会对java递归查询层级进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
JAVA中的递归方法,求讲一下。
方法递归和循环语句差不多,打个比喻。方法递归是小明上楼拿东西,一楼,二楼,三楼……楼顶。在楼顶拿到想要的东西以后,你总不能直接跳下来吧。你得一层一层的返回下来。循环就是驴拉磨,你转多少圈都是在原地。变化的只是盘子里的东西有变化。方法递归不会进入死循环,但陷的太深系统会崩溃。
答得不好抱歉
java的递归查询怎么写
原文在这里,写得不错,楼主可参考下,具体链接如下,我只是搬运工!
/**
* 说明方法描述:将list转为树tree结构
*
* @param allRrecords
* @return
* @time 2016年5月10日 下午6:00:35
* @author yangdong
*/
public ListRecord useListRecordToTree(ListRecord allRrecords) {
ListRecord listParentRecord = new ArrayListRecord();
ListRecord listNotParentRecord = new ArrayListRecord();
// 第一步:遍历allRrecords保存所有数据的uuid用于判断是不是根节点
MapString, String mapAllUuid = new HashMapString, String();
MapString, Record allRecordMap = new HashMapString, Record();
for (Record record : allRrecords) {
mapAllUuid.put(record.getStr("uuid"), record.getStr("uuid"));
allRecordMap.put(record.getStr("uuid"), record);
}
// 第二步:遍历allRrecords找出所有的根节点和非根节点
if (allRrecords != null allRrecords.size() 0) {
for (Record record : allRrecords) {
if (StringUtil.isBlank(record.getStr("parent_uuid"))
|| !mapAllUuid.containsKey(record.getStr("parent_uuid"))) {
listParentRecord.add(record);
} else {
listNotParentRecord.add(record);
}
}
}
// 第三步: 递归获取所有子节点
if (listParentRecord.size() 0) {
for (Record record : listParentRecord) {
// 添加所有子级
record.set("childs", this.getTreeChildRecord(listNotParentRecord, record.getStr("uuid")));
}
}
return listParentRecord;
}
/**
* 说明方法描述:使list转换为树并根据关键字和节点名称过滤
*
* @param allRecords 所有节点
* @param keywords 要过滤的关键字
* @param filterFields 要过滤的字段
* @return
* @time 2016年5月19日 下午3:27:32
* @author yangdong
*/
public ListRecord useListRecordToTreeByKeywords(ListRecord allRecords, String keywords, String... filterFields) {
ListRecord listRecord = new ArrayListRecord();
MapString, Record allRecordMap = new HashMapString, Record();
for (Record record : allRecords) {
allRecordMap.put(record.getStr("uuid"), record);
}
// 遍历allRrecords找出所有的nodeName和关键字keywords相关的数据
if (allRecords != null allRecords.size() 0) {
if (filterFields.length 1) {
for (Record record : allRecords) {
for (String field : filterFields) {
// 比较
if (record.getStr(field).toLowerCase().indexOf(keywords.toLowerCase()) != -1) {
listRecord.add(record);
}
}
}
} else {
for (Record record : allRecords) {
// 比较
if (record.getStr(filterFields[0]).toLowerCase().indexOf(keywords.toLowerCase()) != -1) {
listRecord.add(record);
}
}
}
}
// 查找过滤出来的节点和他们的父节点
listRecord = this.getSelfAndTheirParentRecord(listRecord, new ArrayListRecord(),
new HashMapString, Record(), allRecordMap);
// 将过滤出来的数据变成树tree结构
listRecord = this.useListRecordToTree(listRecord);
return listRecord;
}
/**
* 说明方法描述:递归查询子节点
*
* @param childList 子节点
* @param parentUuid 父节点id
* @return
* @time 2016年5月10日 下午3:29:35
* @author yangdong
*/
private ListRecord getTreeChildRecord(ListRecord childList, String parentUuid) {
ListRecord listParentRecord = new ArrayListRecord();
ListRecord listNotParentRecord = new ArrayListRecord();
// 遍历tmpList,找出所有的根节点和非根节点
if (childList != null childList.size() 0) {
for (Record record : childList) {
// 对比找出父节点
if (StringUtil.equals(record.getStr("parent_uuid"), parentUuid)) {
listParentRecord.add(record);
} else {
listNotParentRecord.add(record);
}
}
}
// 查询子节点
if (listParentRecord.size() 0) {
for (Record record : listParentRecord) {
// 递归查询子节点
record.set("childs", getTreeChildRecord(listNotParentRecord, record.getStr("uuid")));
}
}
return listParentRecord;
}
/**
* 说明方法描述:递归找出本节点和他们的父节点
*
* @param parentList 根据关键字过滤出来的相关节点的父节点
* @param resultList 返回的过滤出来的节点
* @param filterRecordMap 已经过滤出来的节点
* @param allRecordMap 所有节点
* @return
* @time 2016年5月19日 上午9:53:56
* @author yangdong
*/
private ListRecord getSelfAndTheirParentRecord(ListRecord parentList, ListRecord resultList,
MapString, Record filterRecordMap,
MapString, Record allRecordMap) {
// 当父节点为null或者节点数量为0时返回结果,退出递归
if (parentList == null || parentList.size() == 0) {
return resultList;
}
// 重新创建父节点集合
ListRecord listParentRecord = new ArrayListRecord();
// 遍历已经过滤出来的节点
for (Record record : parentList) {
String uuid = record.getStr("uuid");
String parent_uuid = record.getStr("parent_uuid");
// 如果已经过滤出来的节点不存在则添加到list中
if (!filterRecordMap.containsKey(uuid)) {
listParentRecord.add(record);// 添加到父节点中
filterRecordMap.put(uuid, record);// 添加到已过滤的map中
allRecordMap.remove(uuid);// 移除集合中相应的元素
resultList.add(record);// 添加到结果集中
}
// 找出本节点的父节点并添加到listParentRecord父节点集合中,并移除集合中相应的元素
if (StringUtil.isNotBlank(parent_uuid)) {
Record parentRecord = allRecordMap.get(parent_uuid);
if (parentRecord != null) {
listParentRecord.add(parentRecord);
allRecordMap.remove(parent_uuid);
}
}
}
// 递归调用
getSelfAndTheirParentRecord(listParentRecord, resultList, filterRecordMap, allRecordMap);
return resultList;
}
[java] view plain copy
//示例
[java] view plain copy
/**
* 说明方法描述:递归查询所有权限
*
* @param keyword
* @param is_deleted
* @return
* @time 2016年5月10日 下午3:47:50
* @author yangdong
*/
public ListRecord getRecordByKeywordRecursive(String keyword, String is_deleted) {
// 第一步:查询所有的数据
StringBuffer sql = new StringBuffer(
" select pa.uuid,pa.parent_uuid,pa.author_code,pa.author_name,pa.is_menu,pa.sort_number,pa.is_enable,pa.menu_icon ");
sql.append(" from s_author pa");
ListObject params = new ArrayListObject();
sql.append(" where pa.is_deleted=? ");
params.add(is_deleted);
sql.append(" order by pa.sort_number asc ");
ListRecord allRrecords = Db.use(AppConst.DB_DATASOURCE_MAIN).find(sql.toString(), ParamUtil.listToArray(params));
[java] view plain copy
//第二步:将list变为树tree结构
if (StringUtil.isNotBlank(keyword)) {
return super.useListRecordToTreeByKeywords(allRrecords, keyword, "author_name");
} else {
return super.useListRecordToTree(allRrecords);
}
}
java 递归查询数据库
这个就是个树形结构,数据结构里的东西。查询后构建一个树就行了。稍后给你一个代码。
用java递归方法实现
1、递归做为一种算法在程序设计语言中广泛使用,是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。
2、递归算法一般用于解决三类问题:
1)数据的定义是按递归定义的。(Fibonacci(斐波那契)的函数)
2)问题解法按递归算法实现。(回溯)
3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
关于java递归层次的问题
在类之中,方法之外定义就好了;
比如说:
public class Demo01{
public static int number01 = 123;
public void func(){
//todo some thing;
}
}
这里的number01变量就是静态变量,可以在方法内部使用的,是个全局变量,这个类中的任何方法都可以使用他。
希望能够帮到你。
祝你好运。
补充:hanyuekidd说得好,我手误,竟然把全局变量定义成了public,一般都定义成private,这样只能够本类访问。
那句:public static int number01 = 123;
改成:private static int number01 = 123;
这样,其他类就不能使用123这个值。避免出错。
java中递归算法是什么怎么算的?
一、递归算法基本思路:
Java递归算法是基于Java语言实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆的,通常都是从上而下的思维问题,而递归趋势从下往上的进行思维。
二、递归算法解决问题的特点:
【1】递归就是方法里调用自身。
【2】在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
【3】递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。
【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。
【5】在做递归算法的时候,一定把握出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口就是一个条件,当满足了这个条件的时候我们就不再递归了。
三、代码示例:
public class Factorial {
//this is a recursive function
int fact(int n){
if (n==1) return 1;
return fact(n-1)*n;
}
}
public class TestFactorial {
public static void main(String[] args) {
// TODO Auto-generated method stub
Factorial factorial=new Factorial();
System.out.println("factorial(5)="+factorial.fact(5));
}
}
代码执行流程图如下:
此程序中n=5就是程序的出口。
java递归查询五层结构的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java递归查询层级、java递归查询五层结构的信息别忘了在本站进行查找喔。
发布于:2022-12-03,除非注明,否则均为
原创文章,转载请注明出处。