Java 递归地获取列表的元素

Java 递归地获取列表的元素,java,recursion,arraylist,Java,Recursion,Arraylist,我正在做一个项目,我遇到了以下问题 我有一个Client对象,它包含一个ArrayList链接属性。 客户端可以链接到其他客户端。链接的Client的Client存储在此列表中(形成一种图形) 由于对linked属性的递归调用,我想创建一个能够返回所有客户机的方法 这是我的代码: public class Client implements Serializable{ String name; String ipAddress; ArrayList<

我正在做一个项目,我遇到了以下问题

我有一个
Client
对象,它包含一个
ArrayList
链接属性。
客户端
可以链接到其他
客户端
。链接的
Client
Client
存储在此列表中(形成一种图形)

由于对linked属性的递归调用,我想创建一个能够返回所有客户机的方法

这是我的代码:

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);
    }
}
公共类客户端实现可序列化{
字符串名;
字符串地址;
ArrayList链接;
//建造师
公共客户端(字符串名称、字符串IP地址)
{
this.name=name;
this.ipAddress=ipAddress;
linked=newarraylist();
}
公共无效附加列表(客户端c)
{
添加(c);
}
}
我的递归方法是:

public ArrayList<Client> getAllClient(ArrayList<Client> list)
{        
    for(Client c : linked)
    {
        if(!linked.contains(c))
        {
            linked.add(c);
            getAllClient(list);
        }
    }
    return list;
}
公共ArrayList getAllClient(ArrayList列表) { 用于(客户端c:链接) { 如果(!linked.contains(c)) { 添加(c); getAllClient(列表); } } 退货清单; }
我知道这是一个基本问题,但我找不到解决办法。最好的方法是什么?

将参数添加为
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;
}
public ArrayList getAllClients(List outputList,List List){
用于(客户端:列表){
如果(!outputList.contains(客户端)){
GetAllClient(outputList,client.getLinked());
outputList.add(客户端);
}
}
返回输出列表;
}

问题出在哪里?有些东西不起作用?它是否应该是getAllClient方法中的c.getAllClient(list)?当我测试我的方法时,它返回一个空列表。是的,我忘了添加c.getAllClient(列表)谢谢!最好随代码一起发布一点说明,而不是只发布代码。@McEmperon来了:)你对我来说太快了