我正在开展一个项目,我遇到了以下问题。
我有一个Client
对象,其中包含ArrayList<Client>
个链接属性。
Client
可以链接到其他Client
。 Client
的关联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;
}
我知道这是一个基本问题,但我找不到解决方案。这样做的最佳方式是什么?
答案 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;
}