Консоль Java — удалить элемент из arraylist, по-прежнему отображается при печати

#java #arraylist #console-application

#java #arraylist #консоль-приложение

Вопрос:

У меня есть arraylist, который я могу добавить к использованию конструкторов. Это работает отлично, и они отображаются при печати, но когда я их удаляю, они по-прежнему отображаются в списке при печати, хотя, когда я пытаюсь удалить его во второй раз, он говорит «NullPointerException» или переходит к моему отказоустойчивому else if. Поэтому проблема должна быть в части печати, или я думаю совершенно неправильно? Не обновляет ли он arraylist после удаления элемента?

Спасибо.

Материал экземпляра — создание Arraylist / constructor(employeeVar = int)

 static Employees[] employee = new Employees[employeeVar];
static List<Employees> EmployeesAL = new ArrayList<>(Arrays.asList(employee));
  

Печать Arraylist

 else{
    System.out.println("id: "   EmployeesAL.get(i).getEmployeeID()   "Name: "   EmployeesAL.get(i).getEmployeeName());
}
  

Удаление элемента

 else if (employee[idToRemove].getEmployeeID() == idToRemove amp;amp; customer[idToRemove].getEmployeeName() != null){
    EmployeesAL.remove(idToRemove);
    employee[idToRemove] = null;
}
}
  

Ответ №1:

То, как вы его настроили, EmployeesAL и employee полностью не привязаны. Изменение в одном не отражается на другом.

Итак, когда у вас есть: [Jane, Joe, Jack] в вашем employee , это означает, что сначала тоже EmployeesAL есть [Jane, Joe, Jack] . Но если вы затем удалите сотрудника, в результате запись в массиве будет обнулена, но запись в arraylist будет удалена. Итак, удаление Joe приводит к employee тому, что он существует [Jane, null, Jack] и EmployeesAL существует [Jane, Jack] . Теперь позиция Джека в массиве равна индексу 2 ( employee[2] ), а в arraylist — 1: EmployeesAL.get(1) . Ваш код проверяет employee[idToRemove] , а затем запрашивает EmployeeAL удаление этого индекса, что, очевидно, приведет к сбою.

Почему у вас есть 2 структуры данных с одинаковыми данными? Прекратите это делать. Выберите один: либо иметь Employee[] employees , либо иметь List<Employee> . Вероятно, вам нужно только последнее:

 List<Employee> employees = new ArrayList<>();
employees.addAll(Arrays.asList(new Employee("Jane"), new Employee("Joe"), etc);