当前位置: 首页 > 后端技术 > Java

Java递归实例操作——查询层级菜单

时间:2023-04-01 23:23:38 Java

递归程序调用自身的编程技巧称为递归。递归在编程语言中被广泛用作算法。一个过程或函数在其定义或描述中有直接或间接调用自身的方法。它通常将一个大而复杂的问题逐层转化为一个与要解决的原始问题相似的较小规模的问题。递归策略只需要少量的程序就可以描述解题过程中需要的多次重复计算,大大减少了程序的代码量。递归的力量在于用有限的语句定义对象的无限集合。通常,递归需要边界条件、递归前向段和递归返回段。当不满足边界条件时,递归前进;当满足边界条件时,递归返回。递归的应用系统中总会有菜单和权限操作,并且会有无限级的操作,所以需要递归。利用自身调用自身的特性,实现无限层级迭代,通过父子节点展示数据。递归实例操作以查询所有菜单为例数据结构字段名idIDfatherIdParentIDnamename.......数据实体/**File:Menus.java*User:iChochy*URL:https://icochy.com*版权所有(c)2021*日期:2021/03/1614:12:16*/packagecom.ichochy.entity;importjava.util.List;publicclassMenu{privateintid;私人intfatherId;私有字符串名称;privateListgetMenuByFatherId(intfatherId){intvalue=newRandom().nextInt(fatherId);if(value%2!=0){List

menus=newArrayList<>(value);for(inti=1;i<=value;i++){菜单menu=newMenu();菜单.setId(i);menu.setFatherId(fatherId);menu.setName("菜单-"+fatherId+"-"+i);menus.add(菜单);}返回菜单;}返回上校选集.EMPTY_LIST;}没有表查询数据库,写个模拟方法递归方法/**File:Recursion.java*User:iChochy*URL:https://icochy.com*Copyright(c)2021*Date:2021/03/1614:07:16*/packagecom.ichochy.recursion;导入com.ichochy.entity.Menu;导入java.util.ArrayList;导入java.util.Collections;导入java.util.List;导入java。util.Random;publicclassRecursion{/***获取菜单*@paramfatherId*@return*/publicListgetAllMenus(intfatherId){Listmenus=getMenuByFatherId(fatherId);对于(菜单菜单:菜单){fatherId=menu.getId();//调用自己ListchildMenus=getAllMenus(fatherId);//跳出递归if(childMenus.isEmpty()){continue;}menu.setChilds(childMenus);}返回菜单;}构成递归需要的条件:子类问题和父类问题一样,不能无限调用自己,必须有出口,边界返回递归数据[{"id":1,"fatherId":15,"名称”:“menu-15-1”},{”id“:2,”fatherId“:15,”name“:”menu-15-2“,”childs“:[{”id“:1,”fatherId“:2,”name“:”menu-2-1“}]},{“id”:3,“fatherId”:15,“name”:“menu-15-3”,“childs”:[{“id”:1,“fatherId”:3,”name“:”menu-3-1“}]},{”id“:4,”fatherId“:15,”name“:”menu-15-4“,”childs“:[{”id“:1,“fatherId”:4,“name”:“menu-4-1”},{“id”:2,“fatherId”:4,“name”:“menu-4-2”,“childs”:[{“id”:1,“fatherId”:2,“name”:“menu-2-1”}]},{“id”:3,“fatherId”:4,“name”:“menu-4”-3“,”childs“:[{”id“:1,”fatherId“:3,”name“:”menu-3-1“}]}]}]相关文章JavaJSON数据实战操作2020/10/10Java正则表达式实例操作2020/08/28Java方法代理实例操作,静态代理,JDK动态代理,CGLIB动态代理2020/08/24Java反射实例操作2020/08/23Java中的重写和重载(Overload)2020/08/20来源:https://icochy.com/posts/20210315.html

最新推荐
猜你喜欢