1

リストに文字列配列を設定しようとしていますが、リストに追加される配列は最後に追加されたものだけです。そして、これはすべてのリスト要素に追加されるようです。

私は何を間違っていますか?

String[] indata = new String[2];
List<String[]> ls = new ArrayList<String[]>();
indata[0]="test1";
indata[1]="test2";
ls.add(indata);
indata[0]="test3";
indata[1]="test4";
ls.add(indata);
for(int index=0; index < ls.size(); index++)
        System.out.println("ZZZZZZZZZZZZ----->>  " + index + "     " + Arrays.toString(ls.get(index)));

期待される出力:

ZZZZZZZZZZZZ----->>  0     [test1, test2]
ZZZZZZZZZZZZ----->>  1     [test3, test4]

実際の出力:

ZZZZZZZZZZZZ----->>  0     [test3, test4]
ZZZZZZZZZZZZ----->>  1     [test3, test4]
4

2 に答える 2

3

次のようにする必要があります。

String [] indata = new String [2];
List <String []> ls = new ArrayList <String []> ();
indata [0] = "test1";
indata [1] = "test2";
ls.add (indata);
indata = new String [2]; // This line added
indata [0] = "test3";
indata [1] = "test4";
ls.add (indata);

配列への参照を行うls.add (indata)と、配列はリストに格納されますが、配列のコピーは格納されません。したがって、この両方の後、配列の同じインスタンスls.get (0)indata指し、この配列の最初の要素indata [0] = "test3"を変更すると、 を使用して表示される内容が変更されますls.get (0)[0]

于 2013-02-14T09:17:26.900 に答える
0

オブジェクトを作成してリストに追加すると、オブジェクトはリストにコピーされません。代わりに、既存のオブジェクトの参照がリストに追加されます。これを行うと、次のようになります。

String[] indata = new String[2];
List<String[]> ls = new ArrayList<String[]>();
indata[0]="test1";
indata[1]="test2";
ls.add(indata);

indataとls.get(0)の両方が同じオブジェクトを指しています。

ここでも、indataが指すデータを変更して、2番目の配列を追加しています。したがって、ls.get(0)も更新されたデータを指します。

新しい配列を追加するには、新しい配列を作成してリストに追加する必要があります。

于 2013-02-14T09:22:43.350 に答える