0

メソッドを再帰的に実行しようとしています。メソッドの反復ごとに、新しいものを作成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;

}
4

1 に答える 1

1

リストを含むリストの浅いコピーを作成しているようです。したがって、ネストされたリストの参照のみがコピーされます。完全な深さのコピーが必要な場合は、次のようにする必要があります。

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);
    }
}
于 2013-03-09T20:36:26.720 に答える