数据库表中存放着节点信息,表结构为: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就是我们要得到的树对象。