以递归方式获取列表元素

时间:2018-05-12 12:02:59

标签: java recursion arraylist

我正在开展一个项目,我遇到了以下问题。

我有一个Client对象,其中包含ArrayList<Client>个链接属性。 Client可以链接到其他ClientClient的关联Client存储在此列表中(形成一种图形)。

由于对链接属性的递归调用,我想创建一个可以返回所有客户端的方法。

这是我的代码:

public class Client implements Serializable{        

    String name;
    String ipAddress;
    ArrayList<Client> linked;       

    //Constructor
    public Client(String name, String ipAddress)
    {
        this.name=name;
        this.ipAddress=ipAddress;
        linked=new ArrayList<Client>();
    }

    public void addInList(Client c)
    {
        linked.add(c);
    }
}

我的recursiv方法是:

public ArrayList<Client> getAllClient(ArrayList<Client> list)
{        
    for(Client c : linked)
    {
        if(!linked.contains(c))
        {
            linked.add(c);
            getAllClient(list);
        }
    }
    return list;
}

我知道这是一个基本问题,但我找不到解决方案。这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

添加参数outputList,以便能够跟踪已递归到递归中列表的客户端。它将添加所有原始客户端和链接到原始列表的所有客户端,依此类推。

public ArrayList<Client> getAllClients(List<Client> outputList, List<Client> list) {
    for (Client client : list) {
        if (!outputList.contains(client)) {
            getAllClients(outputList, client.getLinked());
            outputList.add(client);
        }
    }
    return outputList;
}