Метод remove() оставляет объекты
Есть и другие способы удаления, но столкнулся с непонятной для меня задачей.
Простой пример. Сделал лист, вывел его содержимое. После чего создал итератор и удалил все элементы листа. После чего вывел лист тремя способами.
List<String> list = new ArrayList<>();
list.add("Ivan");
list.add("Petr");
list.add("Mary");
list.add("Oleg");
System.out.println(list);
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
iterator.next();
iterator.remove();
}
while(iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println();
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
System.out.println(list);
Output:
[Ivan, Petr, Mary, Oleg]
.
.
[]
Но вот когда я вывожу список через итератор, перед методом remove(), я получаю не удаленный список.
List<String> list = new ArrayList<>();
list.add("Ivan");
list.add("Petr");
list.add("Mary");
list.add("Oleg");
System.out.println(list);
Iterator<String> iterator = list.iterator();
// add:
while(iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
while(iterator.hasNext()) {
iterator.next();
iterator.remove();
}
while(iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println();
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
System.out.println(list);
Output:
[Ivan, Petr, Mary, Oleg]
Ivan Petr Mary Oleg
Ivan Petr Mary Oleg
[Ivan, Petr, Mary, Oleg]
Я не могу понять смысл появления или не удаление листа после обычного перебора. Решения я так и не нашел, поэтому буду рад ответу или ссылку где можно найти ответ.
Ответы (1 шт):
Потому что здесь
// add:
while(iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
Вы дошли до конца (курсор показывает на последний элемент в коллекции)
И при попытке все удалить.
while(iterator.hasNext()) {
iterator.next();
iterator.remove();
}
iterator.hasNext() Возвращает false, так как итератор изжил свое, необходимо создавать новый.