gpt4 book ai didi

java - 递归创建对象

转载 作者:行者123 更新时间:2023-12-01 14:47:08 25 4
gpt4 key购买 nike

我正在尝试递归地运行我的方法。在方法的每次迭代中,我创建新的 ArrayList 并填充一些值并检查 if 运算符中的某些条件。如果是 true,将再次运行此方法。如果为 false,我希望退出方法的当前迭代,并使用 ArrayList 的上一个副本在方法的上一个迭代中工作。实际上,当我的条件为 false 并进入方法的上一次迭代时,我会使用相同的 ArrayList。而且这很糟糕。

如何为方法的每次迭代创建 ArrayList 的每个实例,以及如何在上一个方法中使用该 ArrayList 迭代的实例?

我的代码:

    private List<List<String>> letsTry(List<List<ProbableValue>>
probableValues, List<List<String>> data) {

List<List<String>> copyOfData = new ArrayList<List<String>>(data);
List<List<ProbableValue>> copyOfProbableValues =
new ArrayList<List<ProbableValue>>(probableValues);

ProbableValue minPV = getMinPV(copyOfProbableValues);

Set<String> pValues = new HashSet<String>(minPV.getProbableValues());
int i = minPV.getI();
int j = minPV.getJ();


for (String v : pValues) {

if (checker.canSetOnTable(copyOfProbableValues, minPV)) {
if (!SUtils.isItsNumber(copyOfData.get(i).get(j))) {
copyOfData.get(i).set(j, v);

copyOfProbableValues.get(i).get(j).getProbableValues().clear();
checker.removeProbableValue(copyOfProbableValues, v, i, j);

}
letsTry(new ArrayList<List<ProbableValue>>(copyOfProbableValues),
new ArrayList<List<String>>(copyOfData));

}

}

return copyOfData;

}

最佳答案

您似乎正在创建包含列表的列表的浅拷贝。因此,只会复制嵌套列表的引用。如果您想要完整的深度复制,您必须执行以下操作:

List<List<String>> copyOfData = new ArrayList<List<String>>();
for (int i = 0; i < data.size(); i++) {
copyOfData.add(new ArrayList<String>());
for (String s : data.get(i)) {
copyOfData.get(i).add(s);
}
}

List<List<ProbableValue>> copyOfProbableData = new ArrayList<List<ProbableValue>>();
for (int i = 0; i < probableValues.size(); i++) {
copyOfProbableData.add(new ArrayList<ProbableValue>());
for (ProbableValue p : probableValues.get(i)) {
ProbableValue pNew = new ProbableValue();

// copy your object here

copyOfProbableData.get(i).add(pNew);
}
}

关于java - 递归创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15315569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com