不能在 ArrayList 中添加对象?

Posted

技术标签:

【中文标题】不能在 ArrayList 中添加对象?【英文标题】:Can't adding objects in 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 个对同一对象的引用的列表。 这不是优化,你不需要它。 【参考方案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 个唯一对象,

【讨论】:

以上是关于不能在 ArrayList 中添加对象?的主要内容,如果未能解决你的问题,请参考以下文章

不能在 ArrayList 中添加对象?

如何给数组添加元素

java---ArrayList

在Java中怎么修改ArrayList()中元素的值?

Java入门系列:实例讲解ArrayList用法

Array.list添加元素