无法在ArrayList中添加对象?

时间:2012-04-24 04:59:09

标签: java optimization

您好我正在尝试将对象添加到Arraylist中,我正在使用Java。但它并不像我想的那样有效。

假设我们有一个类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); 
}

上面的方法正常。但我希望加快我的代码,所以我只尝试新的一个obejct,代码变成:

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 个答案:

答案 0 :(得分:5)

您的s变量始终引用同一个对象。看起来你要添加10次相同的对象,在for循环结束时,它的字符串将等于"9",其int等于9

答案 1 :(得分:3)

在第二种情况下,您在Sentence中向单个ArrayList实例添加了10个指针。

您必须使10 SentenceArrayList中插入10个指针。

我认为你正在弄乱传递值并在Java中通过引用传递,为了澄清这一点,请看看this post

This post也可能对您有帮助。

答案 2 :(得分:0)

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

如果您想创建比使用此示例更少的代码行,但它不一定更优化。

答案 3 :(得分:0)

为了防止重复的对象。在使用之前始终实例化它们。这样,您的List将拥有n个唯一对象,