用于在java集合中循环存储类对象的数据结构

用于在java集合中循环存储类对象的数据结构,java,algorithm,collections,recurrence,Java,Algorithm,Collections,Recurrence,我的处境是,我在拯救部门、子部门和员工。 我的数据库结构使顶级部门的父id为0。 对于it下的子部门,其父id是顶级部门的主键,因此it成为子部门的循环无限链 PK | Department | Parent Id ---------------------------- 1 | dept1 | 0 2 | dept2 | 0 3 | dept3 | 0 4 | sub_dept1 | 1 5 | sub_dept2 | 1 6 | sub_dept

我的处境是,我在拯救部门、子部门和员工。 我的数据库结构使顶级部门的父id为0。 对于it下的子部门,其父id是顶级部门的主键,因此it成为子部门的循环无限链

PK | Department | Parent Id
----------------------------
1  | dept1      | 0
2  | dept2      | 0
3  | dept3      | 0
4  | sub_dept1  | 1
5  | sub_dept2  | 1
6  | sub_dept3  | 2
7  | sub_dept4  | 2
8  | sub_dept5  | 2
9  | sub_dept6  | 3
10 | sub_dept7  | 3
我创建了以下类:

Public Class Departments{
  private String name;
  private Arraylist<Departments> subDepts;
  private Arraylist<Employees> employees;
}


public void parseDepartmentsAndPopulate(Account account, StringBuffer sb){

    try {
        String jsonStr =sb.toString();

        Log.i("DownloadManager", "jsonStr value:" + jsonStr);

        Gson gson = new Gson();
        Type listType = new TypeToken<ArrayList<Model_Departments>>()
                {
                }.getType();

                JSONObject jsonObj = new JSONObject(jsonStr);
                JSONArray getArray = jsonObj.getJSONArray("groups");

                list_departments = (ArrayList<Model_Departments>) gson.fromJson(getArray+"", listType);
                //Type listType1 = new TypeToken<ArrayList<Model_SubDept>>() {
                //}.getType();
                Log.v("Model_Departments Model", list_departments.toString() );
                Log.v("Model_Departments", list_departments.size()+"length" );
                long autoIncrementId;
                for(Model_Departments m:list_departments)
                {
                    Log.v(LOGTAG, m.name);                      
                    map_departments.put(m.name, "");
                    DepartmentLevels d=new DepartmentLevels(m.name, 0);
                    autoIncrementId=databaseBackend.createDepartment(d);
                    list_topDepartments.add(d);
                    addSubgroups(m,autoIncrementId, account);
                }



                List<DepartmentLevels> list=databaseBackend.getDepartmentLevels();
                for(DepartmentLevels l:list){
                    Log.v(LOGTAG,l.getDepartment_name()+" parent id="+l.getParent_id());
                }
                for (String name: map_departments.keySet()){

                    String key =name.toString();
                    String value = map_departments.get(name).toString();  
                    System.out.println(key + " " + value);  


                } 


                /*for(Model_Departments m:list_departments){
                    if(m.subgroups.size()>0){
                        for(Model_Departments msd:m.subgroups)
                            databaseBackend.createDepartment(new DepartmentLevels(msd.name, 0));

                    }
                }*/

                updateRosterUi();
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
}
在hashmap中迭代这些嵌套值时,我对存储这些嵌套值感到震惊。我无法创建能够保存部门、子部门下的子部门和子部门下的员工的树状视图的数据结构。
有谁能帮我构建collections数据结构,并帮我迭代相同的数据结构。

这就是我填充Department类的方式

public static class Department {
    String id;
    String name;
    List<Department> subDepartements;
    public Department(String id, String name) {
        super();
        this.id = id;
        this.name = name;
        this.subDepartements = new ArrayList<Department>();
    }
}

public static void main(String[] args) throws Exception {
    Map<String, Department> departementsById = new HashMap<String, Department>();
    String[][] values = {
        new String []{"1"  , "dept1"   , "0"} ,
        new String []{"2", "dept2    " , "0"},
        new String []{"3", "dept3    " , "0"},
        new String []{"4", "sub_dept1" , "1"},
        new String []{"5", "sub_dept2" , "1"},
        new String []{"6", "sub_dept3" , "2"},
        new String []{"7", "sub_dept4" , "2"},
        new String []{"8", "sub_dept5" , "2"},
        new String []{"9", "sub_dept6" , "3"},
        new String []{"10" ,"sub_dept7" , "3"}
    };
    for (String[] value : values) {
        String id = value[0];
        String name = value[1];
        departementsById.put(id, new Department(id, name));
    }
    Department rootDepartement = new Department("0", "root departmeent");
    departementsById.put("0", rootDepartement);
    for (String[] value : values) {
        Department departement = departementsById.get(value[0]);
        String parentId = value[2];
        Department parent = departementsById.get(parentId);
        parent.subDepartements.add(departement);
    }
}
公共静态类部门{
字符串id;
字符串名;
列出分部;
公共部门(字符串id、字符串名称){
超级();
this.id=id;
this.name=名称;
this.subdepartments=新的ArrayList();
}
}
公共静态void main(字符串[]args)引发异常{
Map DepartmentsById=new HashMap();
字符串[][]值={
新字符串[]{“1”、“dept1”、“0”},
新字符串[]{“2”、“dept2”、“0”},
新字符串[]{“3”、“dept3”、“0”},
新字符串[]{“4”,“sub_dept1”,“1”},
新字符串[]{“5”,“sub_dept2”,“1”},
新字符串[]{“6”,“sub_dept3”,“2”},
新字符串[]{“7”,“sub_dept4”,“2”},
新字符串[]{“8”,“sub_dept5”,“2”},
新字符串[]{“9”,“sub_dept6”,“3”},
新字符串[]{“10”,“sub_dept7”,“3”}
};
for(字符串[]值:值){
字符串id=值[0];
字符串名称=值[1];
DepartmentsById.put(id,新部门(id,名称));
}
部门根部门=新部门(“0”,“根部门”);
departmentsbyid.put(“0”,rootdepartment);
for(字符串[]值:值){
Department Department=departmentsbyid.get(值[0]);
字符串parentId=值[2];
Department parent=DepartmentsById.get(parentId);
父。子部门。添加(部门);
}
}

当您说“在hashmap中迭代它们时”,您的意思是您已经在hashmap中存储了数据库查询吗?哈希映射的键和值是什么?或者您正在迭代resultset?那个么tree呢。让子部门成为根部门的子部门?让每个节点都有员工列表。您可以通过提供到目前为止您所做的代码来帮助我们…我已经使用hashmap完成了,是否有其他更好的方法或优化的解决方案我现在很抱歉我要求提供代码。。。。。它包含太多未定义的类(DepartmentLevels?、Model_Departments?),而map(我假设它是map_Departments?)仍然未定义。我可以假设您得到输入sa json吗?这对多个嵌套级别的继承人有效吗。
public static class Department {
    String id;
    String name;
    List<Department> subDepartements;
    public Department(String id, String name) {
        super();
        this.id = id;
        this.name = name;
        this.subDepartements = new ArrayList<Department>();
    }
}

public static void main(String[] args) throws Exception {
    Map<String, Department> departementsById = new HashMap<String, Department>();
    String[][] values = {
        new String []{"1"  , "dept1"   , "0"} ,
        new String []{"2", "dept2    " , "0"},
        new String []{"3", "dept3    " , "0"},
        new String []{"4", "sub_dept1" , "1"},
        new String []{"5", "sub_dept2" , "1"},
        new String []{"6", "sub_dept3" , "2"},
        new String []{"7", "sub_dept4" , "2"},
        new String []{"8", "sub_dept5" , "2"},
        new String []{"9", "sub_dept6" , "3"},
        new String []{"10" ,"sub_dept7" , "3"}
    };
    for (String[] value : values) {
        String id = value[0];
        String name = value[1];
        departementsById.put(id, new Department(id, name));
    }
    Department rootDepartement = new Department("0", "root departmeent");
    departementsById.put("0", rootDepartement);
    for (String[] value : values) {
        Department departement = departementsById.get(value[0]);
        String parentId = value[2];
        Department parent = departementsById.get(parentId);
        parent.subDepartements.add(departement);
    }
}