不能在 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 Sentence
在ArrayList
中插入 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 中添加对象?的主要内容,如果未能解决你的问题,请参考以下文章