Java创建树形结构算法实例代码

网友投稿 234 2023-06-17


Java创建树形结构算法实例代码

在javaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构。

首先是需要的JavaBean

import java.io.Serializable;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.Date;

import java.util.Iterator;

import java.util.List;

/**

* 菜单扩展

*/

public class MenuExTeofwxt implements Serializable {

/**

* 菜单ID

*/

private Long id;

/**

* 菜单名称

*/

private String name;

/**

* 菜单地址

*/

private String url;

/**

* 菜单图标

*/

private String icon;

/**

* 父菜单ID

*/

private Long parentId;

/**

* 子菜单

*/

private List children = new ArrayList();

/**

* 菜单顺序

*/

private Integer ordby;

/**

* 菜单状态

*/

private String state;

//省略Getter和Setter

/**

*

* 孩子节点排序

*

*/

public void sortChildren() {

Collections.sort(children, new Comparator() {

@Override

public int compare(MenuExt menu1, MenuExt menu2) {

int result = 0;

Integer ordby1 = menu1.getOrdby();

Integer ordby2 = menu2.getOrdby();

Long id1 = menu1.getId();

Long id2 = menu2.getId();

if (null != ordby1 && null != ordby2) {

result = (ordby1 < ordby2 ? -1 : (ordby1 == ordby2 ? 0 : 1));

} else {

result = (id1 < id2 ? -1 : (id1 == id2 ? 0 : 1));

}

return result;

}

});

// 对每个节点的下一层节点进行排序

for (Iterator it = children.iterator(); it.hasNext();) {

it.next().sortChildren();

}

}

public List getChildren() {

return children;

}

public void setChildren(List children) {

this.children = children;

}

}

Java算法

public static List createTreeMenus(List menus) {

List treeMenus = null;

if (null != menus && !menus.isEmpty()) {

// 创建根节点

MenuExt root = new MenuExt();

root.setName("菜单根目录");

// 组装Map数据

Map dataMap = new HashMap();

for (MenuExt menu : menus) {

dataMap.put(menu.getId(), menu);

}

// 组装树形结构

Set> entrySet = dataMap.entrySet();

for (Entryhttp:// entry : entrySet) {

MenuExt menu = entry.getValue();

if (null == menu.getParentId() || 0 == menu.getParentId()) {

root.getChildren().add(menu);

} else {

dataMap.get(menu.getParentId()).getChildren().add(menu);

}

}

// 对树形结构进行二叉树排序

root.sortChildren();

treeMenus = root.getChildren();

}

return treeMenus;

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序 Toast自定义实例详解
下一篇:Angular ui.bootstrap.pagination分页
相关文章

 发表评论

暂时没有评论,来抢沙发吧~