重复的对象被添加到列表中
Duplicate objects are added to the list
在将对象添加到列表时,我能够看到该对象正在替换列表中的所有值。
请检查下图并注意 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());
//}
}
}
你总是添加相同的
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());
}
您的 obj
变量仅被实例化一次,但被多次添加到列表中。每当您更新 obj
的成员时,您都在更新同一块内存,因此每个列表引用都显示相同的(最后添加的)数据。
我猜你是 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);
}
您的问题是您引用了同一个对象,因为您在循环之前创建了该对象。应该是
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());
//}
}
}
在将对象添加到列表时,我能够看到该对象正在替换列表中的所有值。
请检查下图并注意 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());
//}
}
}
你总是添加相同的
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());
}
您的 obj
变量仅被实例化一次,但被多次添加到列表中。每当您更新 obj
的成员时,您都在更新同一块内存,因此每个列表引用都显示相同的(最后添加的)数据。
我猜你是 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);
}
您的问题是您引用了同一个对象,因为您在循环之前创建了该对象。应该是
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());
//}
}
}