[置顶] 菜单树的java实现(菜单非递归实现)
2017-09-13 08:53
274 查看
菜单树
在web开发中我们经常会遇到菜单的问题,那么如何去实现一个菜单树呢?很多人可能第一反应就是递归,因为菜单是可能是无限级的,那么能不能不用递归就实现一个菜单树呢?要实现的效果图,如下:
class ThreeBean{ private String id; //节点id private String parentId; //父节点id private String name; //节点名称 private List<ThreeBean> children = new ArrayList<ThreeBean>();//子节点 private Double count; //节点对应的数量 private Boolean expanded=false;//是否有子节点 public static void main(String[] args) { Map<String,ThreeBean> nodeListMap = new HashMap<String,ThreeBean>(); ThreeBean root=new ThreeBean("0",null,"根节点",0D); nodeListMap.put(root.getId(), root); ThreeBean a1=new ThreeBean("1","0","节点1",0D); nodeListMap.put(a1.getId(), a1); ThreeBean a2=new ThreeBean("2","0","节点2",0D); nodeListMap.put(a2.getId(), a2); ThreeBean a3=new ThreeBean("3","1","节点3",0D); nodeListMap.put(a3.getId(), a3); ThreeBean a4=new ThreeBean("4","2","节点4",0D); nodeListMap.put(a4.getId(), a4); ThreeBean a5=new ThreeBean("5","2","节点5",0D); nodeListMap.put(a5.getId(), a5); ThreeBean a6=new ThreeBean("6","3","节点6",1D); nodeListMap.put(a6.getId(), a6); ThreeBean a7=new ThreeBean("7","3","节点7",2D); nodeListMap.put(a7.getId(), a7); ThreeBean a8=new ThreeBean("8","3","节点8",3D); nodeListMap.put(a8.getId(), a8); ThreeBean a9=new ThreeBean("9","4","节点9",4D); nodeListMap.put(a9.getId(), a9); ThreeBean a10=new ThreeBean("10","4","节点10",5D); nodeListMap.put(a10.getId(), a10); ThreeBean a11=new ThreeBean("11","4","节点11",6D); nodeListMap.put(a11.getId(), a11); ThreeBean a12=new ThreeBean("12","4","节点12",7D); nodeListMap.put(a12.getId(), a12); ThreeBean a13=new ThreeBean("13","5","节点13",8D); nodeListMap.put(a13.getId(), a13); ThreeBean a14=new ThreeBean("14","5","节点14",9D); nodeListMap.put(a14.getId(), a14); for (String key:nodeListMap.keySet()) { ThreeBean nodeData = nodeListMap.get(key); //主键是空的则为根目录 根据自己情况定义根目录 if (nodeData.getParentId() == null || nodeData.getParentId().equals("")) { root = nodeData; root.setExpanded(true); } else { //根据该目录的父节点组合其子节点集合 ThreeBean zTreeDataInfo =nodeListMap.get(nodeData.getParentId()); zTreeDataInfo.getChildren().add(nodeData); zTreeDataInfo.setExpanded(true); } } //到这里的话 我们就构造了完了 二叉树 ObjectMapper mapper = new ObjectMapper(); String json = null; root=count(root); try { json = mapper.writeValueAsString(root); } catch (JsonProcessingException e) { e.printStackTrace(); } System.out.println(json); } private static ThreeBean count(ThreeBean root){//递归给节点赋值 Double total = root.getCount(); if(root.getChildren().size() < 1){ root.setCount(total); return root; } Double sum = total; for(ThreeBean child : root.getChildren()){ ThreeBean tmp = count(child); sum += tmp.getCount(); } root.setCount(sum); return root; } }
总结:这种实现菜单树的方法应该要比递归简单容易理解。
相关文章推荐
- java利用递归调用实现树形菜单的样式
- [置顶] 递归 加引用 实现tree 和 无限级菜单
- Java树形菜单 递归实现
- java用递归实现折半查找法
- 我用Java实现的二叉树的遍历(递归和非递归)
- 用递归的方式实现文件内容搜索(java)
- 使用函数递归实现基于PHP和MySQL的动态树型菜单[转]
- 使用"函数递归"实现的树型菜单
- 用java实现动态菜单的显示--数据库实现与菜单参数初始化
- Asp.net中递归实现CSS菜单
- 递归的使用——关于括号排列(分别使用Java和C++算法实现)
- Java 记事本——今天添加了简单的插入时间和自动换行菜单的实现
- 递归实现CSS菜单
- 用java实现的迭代和递归插入排序
- Java 记事本——今天添加了简单的插入时间和自动换行菜单的实现
- 树形目录的递归实现(一)数据库+jsp+javabean
- 树形目录的递归实现(一)数据库+jsp+javabean
- 如何实现在java中实现右键菜单
- 使用"函数递归"实现基于php和MySQL的动态树型菜单
- java递归实现文件的删除和拷贝