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

2025-05-29 0 49

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

首先是需要的JavaBean

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95
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;

/**

* <Description> 菜单扩展<br>

*/

public class MenuExt implements Serializable {

/**

* 菜单ID

*/

private Long id;

/**

* 菜单名称

*/

private String name;

/**

* 菜单地址

*/

private String url;

/**

* 菜单图标

*/

private String icon;

/**

* 父菜单ID

*/

private Long parentId;

/**

* 子菜单

*/

private List<MenuExt> children = new ArrayList<MenuExt>();

/**

* 菜单顺序

*/

private Integer ordby;

/**

* 菜单状态

*/

private String state;

//省略Getter和Setter

/**

*

* <Description> 孩子节点排序<br>

*

*/

public void sortChildren() {

Collections.sort(children, new Comparator<MenuExt>() {

@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<MenuExt> it = children.iterator(); it.hasNext();) {

it.next().sortChildren();

}

}

public List<MenuExt> getChildren() {

return children;

}

public void setChildren(List<MenuExt> children) {

this.children = children;

}

}

Java算法

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30
public static List<MenuExt> createTreeMenus(List<MenuExt> menus) {

List<MenuExt> treeMenus = null;

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

// 创建根节点

MenuExt root = new MenuExt();

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

// 组装Map数据

Map<Long, MenuExt> dataMap = new HashMap<Long, MenuExt>();

for (MenuExt menu : menus) {

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

}

// 组装树形结构

Set<Entry<Long, MenuExt>> entrySet = dataMap.entrySet();

for (Entry<Long, MenuExt> 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;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/banning/p/6218633.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java创建树形结构算法实例代码 https://www.kuaiidc.com/119382.html

相关文章

发表评论
暂无评论