【问题标题】:Duplicate objects are added to the list [duplicate]重复的对象被添加到列表中[重复]
【发布时间】:2015-07-24 02:00:23
【问题描述】:

在将对象添加到列表时,我可以看到该对象正在替换列表中的所有值。

请检查下图并注意 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());

        //}

    }
}

【问题讨论】:

  • 邮政编码内联为文本。

标签: java arraylist collections core


【解决方案1】:

你总是添加相同的

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

【讨论】:

  • 如果我使用相同的重复值添加到列表中
  • @Kartheeks 你试过这个吗?用该代码不可能得到重复的值.....也许你打印错了,再次检查调试器。
  • 非常感谢我明白了
  • @kartheeks 很高兴我能帮上忙 :)
【解决方案2】:

您的 obj 变量仅被实例化一次,但被多次添加到列表中。每当您更新 obj 的成员时,您都在更新同一块内存,因此每个列表引用都显示相同的(最后添加的)数据。

【讨论】:

    【解决方案3】:

    我猜你是 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);
    }
    

    【讨论】:

      【解决方案4】:

      您的问题是您引用的是同一个对象,因为您在循环之前创建了该对象。应该是

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

      【讨论】:

        猜你喜欢
        • 2015-12-04
        • 2019-09-28
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多