重复的对象被添加到列表中

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());

        //}

    }
}