Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中实现具有层次结构的列表_Java_Hierarchy - Fatal编程技术网

在Java中实现具有层次结构的列表

在Java中实现具有层次结构的列表,java,hierarchy,Java,Hierarchy,我在Java小任务中遇到了一个编程概念问题。我有一个Employee类,它有两个参数:ID和他的经理的ID。我还有班主任,这是我的员工的容器。现在,我想在树状层次结构中列出它们,如下所示: Dominik Sankowski |-Radosław Adamus | |- Łukasz Sturgulewski | |- Andrzej Albrecht |-Lidia Jackowska | |- Michał Paluch |-Szymon Grabowski | |- Wojciech Bi

我在Java小任务中遇到了一个编程概念问题。我有一个Employee类,它有两个参数:ID和他的经理的ID。我还有班主任,这是我的员工的容器。现在,我想在树状层次结构中列出它们,如下所示:

Dominik Sankowski
|-Radosław Adamus
| |- Łukasz Sturgulewski
| |- Andrzej Albrecht
|-Lidia Jackowska
| |- Michał Paluch
|-Szymon Grabowski
| |- Wojciech Bieniecki
| |- Sebastian Stoliński
| |- Tomasz Węgliński
|-Jacek Kucharski
取决于谁是谁的老板

我试过用树状图,也试过复发,但我的头真的爆炸了,我就是做不好,我的大脑被阻塞了。有什么建议吗

编辑1: 到目前为止,我的代码是:

public class Staff {
    //Integer - manager id, Employee - object
    private ArrayList <Employee> employees;

    public Staff(){

        employees = new ArrayList<Employee>();
        employees.add(new Employee(1, "Wojciech","Bieniecki", 15));
        employees.add(new Employee(2, "Dariusz","Brzeziński", 18));
        employees.add(new Employee(3, "Michał","Paluch", 19));
        employees.add(new Employee(4, "Sebastian","Stoliński",  1));
        employees.add(new Employee(5, "Tomasz","Węgliński", 1));
        employees.add(new Employee(6, "Radosław","Adamus", 16));
        employees.add(new Employee(7, "Andrzej","Albrecht",  11));
        employees.add(new Employee(8, "Robert","Banasiak",  13));
        employees.add(new Employee(9, "Tomasz","Koszmider",  10));
        employees.add(new Employee(10, "Krzysztof","Strzecha", 16));
        employees.add(new Employee(11, "Łukasz","Sturgulewski",  6));
        employees.add(new Employee(12, "Piotr","Urbanek", 17));
        employees.add(new Employee(13, "Radosław","Wajman",  16));
        employees.add(new Employee(14, "Jacek","Wiślicki",  16));
        employees.add(new Employee(15, "Szymon","Grabowski",  16));
        employees.add(new Employee(16, "Dominik","Sankowski",  0));
        employees.add(new Employee(17, "Jacek","Kucharski",  16));
        employees.add(new Employee(18, "Piotr","Ostalczyk",  16));
        employees.add(new Employee(19, "Lidia","Jackowska",  16));
    }

    public Employee convertIdToEmployee (int id)
    {
        for (int i=0; i<employees.size(); i++)
        {
            if(id == employees.get(i).getId())
            {
                return employees.get(i);
            }
        }
        return null;
    }


    public Employee find(String familyName)
    {
        for (int i=0; i<employees.size(); i++)
        {
            if(familyName == employees.get(i).getFamilyName())
            {
                return employees.get(i);
            }
        }
        return null;

    }

    public ArrayList<Employee> showSubordinates(Employee emp)
    {
        ArrayList <Employee> result = new ArrayList <Employee>();
        for (int i=0; i<employees.size(); i++)
        {
            if(emp.getId() == employees.get(i).getManagerId())
            {
                result.add(employees.get(i));
            }
        }
        return result.size() != 0 ? result : null;
    }

    public ArrayList<Employee> buildTree(ArrayList <Employee> subordinates){

        ArrayList <Employee> result = new ArrayList <Employee>();
        for(int i=0; i<subordinates.size();i++)
        {
            buildTree(showSubordinates(subordinates.get(i)));
            result.add(subordinates.get(i));

        }
        return result;
    }

    public ArrayList<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(ArrayList<Employee> employees) {
        this.employees = employees;
    }

    @Override
    public String toString()
    {
        return "";
    }
}

Employee类只是一个具有getter和setter的数据持有者。

我建议创建一个Employee类作为层次结构的顶层。经理可以从此Employee类继承。你可以有一份经理级员工名单,他们在他/她手下工作

用于打印层次结构。您可以在最高层的经理上调用print,递归地打印所有推荐他的员工,然后依次调用print


希望这有帮助。递归可能是打印整个层次结构的关键。

您能添加到目前为止的代码吗?这是一个现有的。