我有一个简单的类,只有一个字符串字段,并且有 ArrayList。 当我执行 for 循环向 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
太大需要太多内存。谢谢
最佳答案
您正在将相同的元素重新添加到列表中。尝试:
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 中设置了不同的值,并将列表中的对象相乘。
关于java - 自定义对象的ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35777385/