Скопируйте ссылки на новый список массивов и удалите в Java - PullRequest
0 голосов
/ 06 марта 2019

У меня есть один список массива StudentsList, например:

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

Я хочу скопировать ссылки на эти объекты в другом списке, например StudentsListCopy.Когда я делаю какие-либо изменения в объектах Student в studentListCopy, скажем, меняю имя, оно также должно отражаться в исходном списке, но если я удаляю объект student из StudentsListCopy, он не должен удаляться из исходного списка.Как мне этого добиться?

Ответы [ 4 ]

0 голосов
/ 06 марта 2019

Создайте неизменяемый список из вашего списка. Таким образом, вы можете редактировать свойства элементов списка и не можете удалять элементы из списка. Как ниже:

List<Student> editStudentList = Collections.unmodifiableList(yourStudentList);
0 голосов
/ 06 марта 2019

Вам нужно просто создать новый 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();
  }
}
0 голосов
/ 06 марта 2019
ArrayList<student> studentsListCopy = new ArrayList<student>();

for(int i=0;i<studentList;i++)
{
   studentsListCopy.add(studentList[i])
}

Возможно, вы искали что-то подобное?

0 голосов
/ 06 марта 2019

Создайте новый список с объектами, например, new ArrayList<>(subjects) и делайте, как вам угодно.

...