码迷,mamicode.com
首页 > 编程语言 > 详细

解析java树形结构

时间:2014-07-05 20:54:07      阅读:396      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   java   color   

思路一:

1、准备表结构及对应的表数据
a、表结构:

create table TB_TREE
(
CID NUMBER not null,
CNAME VARCHAR2(50),
PID NUMBER //父节点
)

b、表数据:

bubuko.com,布布扣
insert into tb_tree (CID, CNAME, PID) values (1, 中国‘, 0);
insert into tb_tree (CID, CNAME, PID) values (2, 北京市‘, 1);
insert into tb_tree (CID, CNAME, PID) values (3, 广东省‘, 1);
insert into tb_tree (CID, CNAME, PID) values (4, 上海市‘, 1);
insert into tb_tree (CID, CNAME, PID) values (5, 广州市‘, 3);
insert into tb_tree (CID, CNAME, PID) values (6, 深圳市‘, 3);
insert into tb_tree (CID, CNAME, PID) values (7, 海珠区‘, 5);
insert into tb_tree (CID, CNAME, PID) values (8, 天河区‘, 5);
insert into tb_tree (CID, CNAME, PID) values (9, 福田区‘, 6);
insert into tb_tree (CID, CNAME, PID) values (10, 南山区‘, 6);
insert into tb_tree (CID, CNAME, PID) values (11, 密云县‘, 2);
insert into tb_tree (CID, CNAME, PID) values (12, 浦东‘, 4);
bubuko.com,布布扣

2、TreeNode对象,对应tb_tree

bubuko.com,布布扣
public class TreeNode implements Serializable {
private Integer cid;
private String cname;
private Integer pid;
private List nodes = new ArrayList();
 
public TreeNode() {
}
 
//getter、setter省略
}
bubuko.com,布布扣

3、测试数据

bubuko.com,布布扣
public class TreeNodeTest {
@Test
public void loadTree() throws Exception{
System.out.println(JsonUtils.javaToJson(recursiveTree(1)));
}
 
/**
* 递归算法解析成树形结构
*
* @param cid
* @return
* @author jiqinlin
*/
public TreeNode recursiveTree(int cid) {
//根据cid获取节点对象(SELECT * FROM tb_tree t WHERE t.cid=?)
TreeNode node = personService.getreeNode(cid);
//查询cid下的所有子节点(SELECT * FROM tb_tree t WHERE t.pid=?)
List childTreeNodes = personService.queryTreeNode(cid); 
//遍历子节点
for(TreeNode child : childTreeNodes){
TreeNode n = recursiveTree(child.getCid()); //递归
node.getNodes().add(n);
}
 
return node;
}
}
bubuko.com,布布扣

输出的json格式如下:

bubuko.com,布布扣
{
    "cid": 1,
    "nodes": [
        {
            "cid": 2,
            "nodes": [
                {
                    "cid": 11,
                    "nodes": [
                         
                    ],
                    "cname": "密云县",
                    "pid": 2
                }
            ],
            "cname": "北京市",
            "pid": 1
        },
        {
            "cid": 3,
            "nodes": [
                {
                    "cid": 5,
                    "nodes": [
                        {
                            "cid": 7,
                            "nodes": [
                                 
                            ],
                            "cname": "海珠区",
                            "pid": 5
                        },
                        {
                            "cid": 8,
                            "nodes": [
                                 
                            ],
                            "cname": "天河区",
                            "pid": 5
                        }
                    ],
                    "cname": "广州市",
                    "pid": 3
                },
                {
                    "cid": 6,
                    "nodes": [
                        {
                            "cid": 9,
                            "nodes": [
                                 
                            ],
                            "cname": "福田区",
                            "pid": 6
                        },
                        {
                            "cid": 10,
                            "nodes": [
                                 
                            ],
                            "cname": "南山区",
                            "pid": 6
                        }
                    ],
                    "cname": "深圳市",
                    "pid": 3
                }
            ],
            "cname": "广东省",
            "pid": 1
        },
        {
            "cid": 4,
            "nodes": [
                {
                    "cid": 12,
                    "nodes": [
                         
                    ],
                    "cname": "浦东",
                    "pid": 4
                }
            ],
            "cname": "上海市",
            "pid": 1
        }
    ],
    "cname": "中国",
    "pid": 0
}

**********************************************************************************************************************************************************

思路二:

数据库  id,name,parent_id

java对象:

private class TreeNode{
    private String id;
    private String name;
    private String parentId;
    private List<TreeNode> children;
    
    // TODO getter/setter
}

树构造代码如下:

        List<TreeNode> menuList = xxManager.findAllMenu();
        
        List<TreeNode> nodeList = new ArrayList<TreeNode>();
        for(TreeNode node1 : menuList){
            boolean mark = false;
            for(TreeNode node2 : menuList){
                if(node1.getParentId()!=null && node1.getParentId().equals(node2.getId())){
                    mark = true;
                    if(node2.getChildren() == null)
                        node2.setChildren(new ArrayList<TreeNode>());
                    node2.getChildren().add(node1); 
                    break;
                }
            }
            if(!mark){
                nodeList.add(node1); 
            }
        }
        //转为json格式        
        String json = JSONArray.fromObject(nodeList).toString();
        System.out.println("json:"+json);

原理如下图了:

bubuko.com,布布扣

解析java树形结构,布布扣,bubuko.com

解析java树形结构

标签:des   style   blog   http   java   color   

原文地址:http://www.cnblogs.com/cjt-java/p/3826288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!