在执行复制块

时间:2018-04-20 11:24:18

标签: java list arraylist

我有调度程序的应用程序。 它每30秒运行一次应用程序。

在我的应用中,我有list1和list2

  static List<Post> list1 = Collections.synchronizedList(new ArrayList<Post>());
  static List<Post> list2 = Collections.synchronizedList(new ArrayList<Post>());

for (int i = 0; i < responseGetAllNew.size(); i++) {
      Object1 obj1 = new Obj1();
       obj1.setName("JOHN");

      if (list1.contains(pt)) {
        System.out.println("Already in the list");
      } else {
        list1 .add(obj1 );
      }
 }

 private List<Object1> getNewAndChanged() {
    List<Object1> newObjs = new ArrayList<Object1>();
    for (Object1 obj1 : list1) {
      if (!list2.contains(obj1 )) {
        newObjs.add(obj1 );
      }
    }
    return newObjs;
  }

之后:

list2 = list1;

所以我的问题是当我通过soapUI向list1添加新对象时 当程序进入list1.add(obj1)时;它在list1中添加了对象,但不知何故它也在list2中添加了对象。

所以我的问题是什么可以导致这个以及如何在执行此行之前避免将对象写入list2中list2 = list1

1 个答案:

答案 0 :(得分:2)

这是因为两个对象都指的是同一个实例。您需要克隆它或创建第二个对象,如下所示:

list2 = new ArrayList<>(list1);