自定义对象的ArrayList

时间:2016-03-03 16:16:00

标签: java class for-loop arraylist

我有一个只有一个String字段的简单类,我有ArrayList。 当我为循环添加一些元素给ArrayList时,发生了一些奇怪的事情。

ArrayList<MyClass> list = new ArrayList<Myclass>();
MyClass mc = new MyClass();

for(int i=0;i<someNumber;i++){
     String s = new String(Integer.toString(i));
     mc.setString(s);
     list.add(mc);
}

在此之后,当我打印我的列表时,列表中每个元素的字符串都是相同的。

我理解如果我list.add(new Myclass(s);正常工作,但我是否每次都需要创建一个新的MyClass实例?如果someNumber很大,则会占用太多内存。感谢

2 个答案:

答案 0 :(得分:3)

您正在将相同的元素重新添加到列表中。尝试:

List<MyClass> list = new ArrayList<>(someNumber);


for(int i=0;i<someNumber;i++){
     String s = new String(Integer.toString(i));
     MyClass mc = new MyClass();  // create new object mc 
     mc.setString(s);
     list.add(mc); // add the new object to the list
}

通过相同的对象,我指的是指向对象的相同指针,您必须创建新的指针(初始化新类),将其作为单独的实例添加到列表中。在这种情况下,您在同一对象的setString中设置了不同的值,并在列表中对象进行乘法。

答案 1 :(得分:2)

您需要在循环内移动对象mc的实例化。

ArrayList<MyClass> list = new ArrayList<Myclass>();


for(int i=0;i<someNumber;i++){
     MyClass mc = new MyClass();
     String s = new String(Integer.toString(i));
     mc.setString(s);
     list.add(mc);
}