【问题标题】:Can't adding objects in ArrayList?不能在 ArrayList 中添加对象?
【发布时间】:2012-05-04 17:41:32
【问题描述】:

您好,我正在尝试将对象添加到 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); 
}

上面的工作正常。但我想加快我的代码,所以我尝试只新建一个对象,代码变成:

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) 期间不起作用。

非常感谢您的回复。

【问题讨论】:

  • 确定您的结果“将变为空”吗?您应该得到一个包含 10 个对同一对象的引用的列表。
  • 这不是优化,你不需要它。

标签: java optimization


【解决方案1】:

您的s 变量始终指向同一个对象。看起来您正在添加同一个对象 10 次,在 for 循环结束时,其字符串等于 "9",其 int 等于 9

【讨论】:

  • 你的意思是我的 ArrayList 只会得到一个对象吗?在我的示例之后,它只会获取带有i =9的对象?
  • 该列表将包含对单个 Sentence 的 10 个引用。 Sentence 将有 i = 9
  • 是的,我就是这个意思。您需要调用构造函数 n 次才能获取 n 个对象。您现在所做的只是对一个对象进行修改,并存储对它的 n 个引用。
【解决方案2】:

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

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

我认为您在搞乱 Java 中的按值传递和按引用传递,为了澄清这一点,请查看 this post

This post 也可能对您有所帮助。

【讨论】:

  • 我明白了,所以在这种情况下,我无法避免制作这些新对象。
  • 是的,当然,你需要在内存中创建 10 个 Sentence 对象。
【解决方案3】:
ArrayList<Sentence> result = new ArrayList<Sentence>();
for (int i =0; i<10;i++)
{
    result.add(new Sentence(i.toString(),i)); 
}

如果您想创建的代码行数少于可以使用此示例的代码行数,但不一定会更优化。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2013-10-29
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多