2

こんにちは、Arraylist にオブジェクトを追加しようとしています。Java を使用しています。しかし、意図したとおりに機能しません。

class があるとしましょうSentence。コードは次のようになります

ArrayList<Sentence> result = new ArrayList<Sentence>();
for (int i =0; i<10;i++)
{
    Sentence s = new Sentence(i.toString(),i);
    //there is a string and an int in this Sentence object need to be set
    result.add(s); 
}

上記のものは正しく動作します。しかし、私は自分のコードを高速化したいので、新しいオブジェクトのみを試してみました。コードは次のようになります。

ArrayList<Sentence> result = new ArrayList<Sentence>();
Sentence s = new Sentence(" ",0);
for (int i =0; i<10;i++)
{
    s.setString(i.toString());
    s.setInt(i);
    result.add(s); 
}

ただし、この場合、結果は空になります。オブジェクトのコンテンツを変更すると思いますsが、result.add(s).

お返事ありがとうございます。

4

4 に答える 4

5

変数sは常に同じオブジェクトを参照しています。同じオブジェクトを 10 回追加しているように見えます。これは、for ループの終わりまでに、string が に等しく"9"なり、int が に等しくなり9ます。

于 2012-04-24T05:04:17.380 に答える
3

Sentence2 番目のケースでは、1 つのインスタンスに10 個のポインターを追加しますArrayList

Sentenceに 10 個のポインターを挿入するには、10 を作成する必要がありますArrayList

Javaで値渡しと参照渡しをいじっていると思います。これを明確にするために、この投稿を見てください。

この投稿も役立つかもしれません。

于 2012-04-24T05:04:31.330 に答える
0
ArrayList<Sentence> result = new ArrayList<Sentence>();
for (int i =0; i<10;i++)
{
    result.add(new Sentence(i.toString(),i)); 
}

この例よりも少ないコード行を作成したい場合は、この例を使用できますが、必ずしもより最適化されているわけではありません。

于 2012-04-24T05:28:55.637 に答える
0

オブジェクトの重複を防ぐため。使用する前に必ずインスタンス化してください。このようにして、リストには n 個の一意のオブジェクトがあり、

于 2014-01-11T23:29:17.260 に答える