首页 > 解决方案 > 复制对新数组列表的引用并在 Java 中删除

问题描述

我有一个数组列表,studentsList,如下所示:

class Student{
String name;
List<Subject> subjects;
}

我想在另一个列表中复制对这些对象的引用,比如 studentsListCopy。当我对 studentsListCopy 中的学生对象进行任何更改时,比如更改名称,它也应该反映在原始列表中,但是如果我从 studentsListCopy 中删除学生对象,它不应该从原始列表中删除。我怎样才能做到这一点?

标签: javaarraylistclone

解决方案


您必须简单地创建一个新的List(应该使用子实现),将原始列表作为参数。

任何容器(原始列表或其副本)中元素的任何更改都会影响对象本身,因为您正在操作引用的对象,并且在任何这些容器中删除或插入元素不会影响另一个容器,因为它们完全分开:

class Student {
  String name;
  List<Subject> subjects;

  private void someMethod() {
    // create a shallow copy
    List<Subject> copy = new ArrayList<>(subjects);
    // edit the contained elements
    copy.get(0).setSomeProperty();
  }
}

推荐阅读