-1

これは私のSSCCEです

http://pastebin.com/rABzKgAx

http://pastebin.com/SypQxApe

整数の両端キューのデータ構造リストを操作しようとしています。

したがって、dequeにいくつかの整数を追加してから、finalListに追加しますが、Dequeでさらに操作して要素を削除すると、finalListからこれらの要素も削除されます。では、これらのアイテムをリストに保存するにはどうすればよいですか?たとえば、finalListに30個の要素を追加しますが、Dequeから元のアイテムを削除しているため、finalList:/に30個の空の要素があります。コードから残りを読み取ることができます。57行目にはstdoutに出力があり、空の文字列が返されるため、問題を確認できます。

問題は、オブジェクトではなくオブジェクトへの参照のみをコピーすることです。オブジェクトをコピーするにはどうすればよいですか?

4

2 に答える 2

1

final後で別のリストを指すように変数を変更できないことを意味するだけであり、リストを変更できないことを意味するわけではありません。元のリストが必要な場合は、変更する前にコピーする必要があります。

于 2012-04-10T11:37:07.547 に答える
1

これは、デバッガーの使用が役立つ場合です。

使用しています

finalList.add(tokens);

リストのコピーを追加したが、参照のコピーのみをリストに追加していると仮定します。

それで

            tokens.add(token);
            Func(places, index+1, tokens);
            tokens.removeLast();

追加するすべての要素を削除し、リストは空になります。

あなたが意図したものだったようです

        finalList.add(new LinkedList<Integer>(tokens));
于 2012-04-10T11:39:20.547 に答える