Как немедленно запустить ArrayList.add()?

#java #arraylist

#java #arraylist

Вопрос:

  ArrayList<Student> list = new ArrayList<>(); 
   /*Student just have (ID,name,semester and ArrayList<String> course */

 int ID;
 String name, semester;
 ArrayList<String> course = new ArrayList<>();
  

Затем я добавляю в список какого-нибудь студента

         ID= 123;
        name = "Hoang Van Lam";
        semester = "Spring2020";
        course.add("JAVA");
        course.add("C#");
        course.add("PYTHON");
        list.add(new Student(ID,name,semester,course));
        course.clear();
  

После этого я хочу добавить больше учеников, я пытаюсь использовать course.clear(); для повторного использования cousre .
Затем я понял, что course.clear запускался до list.add () того, как его взяли.Итак, как я могу решить эту проблему? Спасибо всем

Комментарии:

1. Где не просто использовать course = new ArrayList<String>()?

2. Я использую ArrayList<String> course для хранения многих названий курсов студентов. Вот класс student: ` private int ID; private String name; private String semestr; private ArrayList<String> course; общедоступный студент () { } общедоступный студент (идентификатор int, строковое имя, строковый семестр, курс ArrayList<String>) { this. ID = идентификатор; this.name = name; this.semestr = семестр; this.course = курс; }`

3. Если вы повторно используете один и тот же экземпляр списка для course , не имеет значения, было ли это сделано до или после list.add() , в конце у всех студентов будет один и тот же список курсов (тот, который вы добавляете последним)

Ответ №1:

Когда вы передаете объект конструктору, вы передаете его «ссылку», поэтому при вызове course.clear() вы просто очищаете его, и теперь объект пуст в любом месте! Если вы хотите иметь новый список, вы можете создать его и использовать course для повторного обращения к нему :

 ID= 123;
name = "Hoang Van Lam";
semester = "Spring2020";
course.add("JAVA");
course.add("C#");
course.add("PYTHON");
list.add(new Student(ID,name,semester,course));
course= new ArrayList<>();