生成java树对象

[url]http://javasl.blog.sohu.com/128841203.html[/url]

数据库表中存放着节点信息,表结构为:id 为节点id,name为节点名字,pid为其父节点,如果pid为0则表示此节点为根节点。根据表中数据信息生成一个数对象,里面存放节点的树状信息。

代码如下:

//节点对象

public class Person {



private String id;

private String pid;

private String name;



getter …

setter …

}




// 树根对象,里面级联存储子节点信息,直到树叶

public class TreeObj {



private String id;

private String name;

private List<TreeObj > cList =new ArrayList<TreeObj>();



getter …

setter …

}




public class Test {



public static void main(String[] argStrings) {



List<Person> pList = new ArrayList<Person>();

pList.add(createPerson("1", "0", "a"));

pList.add(createPerson("2", "0", "b"));

pList.add(createPerson("3", "2", "c"));

pList.add(createPerson("4", "2", "d"));

pList.add(createPerson("5", "0", "e"));

pList.add(createPerson("6", "5", "f"));

pList.add(createPerson("7", "6", "g"));



List<TreeObj> treeList = new ArrayList<TreeObj>();



for (Person person : pList) {

// find root note

if ("0".equals(person.getPid())) {

TreeObj treeObj = new TreeObj();

treeObj.setId(person.getId());

treeObj.setName(person.getName());



treeList.add(putObjIterater(pList,treeObj));

}

}

System.out.println(treeList);

}



private static Person createPerson(String id, String pid,String name) {

Person p1 = new Person();

p1.setId(id);

p1.setPid(pid);

p1.setName(name);

return p1;

}



private static TreeObj putObjIterater(List<Person> pList, TreeObj treeObj) {

// find child notes from pList and and the list in treeObj

for (Person person : pList) {

if (treeObj.getId().equals(person.getPid())) {

// if treeObj has child note ,add it to the treeObj's list

TreeObj newTreeObj = new TreeObj();

newTreeObj.setId(person.getId());

newTreeObj.setName(person.getName());

treeObj.getCList().add(newTreeObj);

putObjIterater(pList, newTreeObj);

}

}

return treeObj;

}



}




打印出的treeList就是我们要得到的树对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值