在向列表添加对象时,我能够看到该对象正在替换列表中的所有值。
请检查下面的图像,并注意列表中对象重复的for循环代码。
public static void main(String args[]) {
ArrayList<Modelclass> al = new ArrayList<Modelclass>();
Modelclass obj = new Modelclass();
for (int i = 0; i < 10; i++) {
obj.setName(2 + i);
obj.setRoolno(4 + i);
System.out.println(obj);
//if (!al.equals(obj)) {
al.add(obj);
System.out.println(obj.getName() + "" + obj.getRoolno());
//}
}
}
答案 0 :(得分:3)
您总是添加相同的
Modelclass obj = new Modelclass();
你在for循环之外创建的。然后,在循环内部,您将修改值。
由于它始终是对同一对象的引用,因此您正在修改ArrayList中的所有项。
请改为尝试:
for (int i = 0; i < 10; i++) {
Modelclass obj = new Modelclass(); //This is the key to solve it.
obj.setName(2 + i);
obj.setRoolno(4 + i);
System.out.println(obj);
al.add(obj);
System.out.println(obj.getName() + "" + obj.getRoolno());
}
答案 1 :(得分:1)
您的obj
变量仅被实例化一次,但被多次添加到列表中。每当您更新obj
的成员时,您都在更新同一块内存,因此每个列表引用都会显示相同(最后添加的)数据。
答案 2 :(得分:0)
我猜你是Java新手?只需在循环中创建新实例即可。
ArrayList<ModelClass> al = new ArrayList<ModelClass>();
for(int i=0; i<10; i++){
ModelClass obj = new ModelClass();
obj.setName(2+i);
obj.setRoolno(4+i);
al.add(obj);
}
答案 3 :(得分:0)
您的问题是您引用相同的对象,因为您在循环之前创建了对象。应该是
public static void main(String args[]) {
ArrayList<Modelclass> al = new ArrayList<Modelclass>();
for (int i = 0; i < 10; i++) {
Modelclass obj = new Modelclass();
obj.setName(2 + i);
obj.setRoolno(4 + i);
System.out.println(obj);
//if (!al.equals(obj)) {
al.add(obj);
System.out.println(obj.getName() + "" + obj.getRoolno());
//}
}
}