我有一个只有一个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
很大,则会占用太多内存。感谢
答案 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);
}