-1
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> tmp = new ArrayList<Integer>();

tmp.add(1);
tmp.add(2);
tmp.add(3);
res.add(tmp);

次に、tmp を変更する必要があります。

tmp.remove(tmp.size() - 1);

res を何も変更せずに tmp を変更するにはどうすればよいですか? この方法で tmp を変更すると、res の内容も変更されます。これはJavaの逆参照に関連していると思いましたが、おそらく非常に一般的で重要な質問なので、誰か助けてもらえますか?

4

3 に答える 3

2

古いものをそのままにしておくにはArrayList既存のものをコピーしてArrayListに割り当てますtmp

tmp = new ArrayList<Integer>(tmp);

これで、古いリストに影響を与えることなく、リストのコピーで作業できます。

于 2013-11-04T23:43:41.293 に答える
1

あなたは探している

res.add(new ArrayList<Integer>(tmp));

アイデアは、複数の場所で同じ参照を使用するのではなく、オブジェクトのコピーを作成することです。

于 2013-11-04T23:43:34.727 に答える
1

のコピーを作成し、そのコピーを にList保存する必要があります。res

res.add(new ArrayList<Integer>(tmp));

リストはコピーですが、リスト内のオブジェクトは同じであることに注意してください。したがって、1 つのリスト内のオブジェクトを変更すると、コピー内のオブジェクトも変更されます。元のリストのディープ コピーを行わない限り。

于 2013-11-04T23:46:35.177 に答える