Почему так решилось:
for (int i = 9999; i > -1; i--) {
list.remove(i);
}
А так нет:
for (int i = 0; i < 10000; i++) {
list.remove(i);
}
Alexander Avdoshin
34 уровень
Удаление элементов.
Решен
Комментарии (14)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Viktoriia Tkachuk
3 апреля 2020, 11:26
for (int i = 0; i <= 10000; ++i) {
list.remove(10000 - i);
}
или так
0
Tan
8 января 2019, 19:45
я решил вариантом 2, но немного по-другому.
for (int i = 0; i < 10000; i++) {
list.remove(0);
}
т.е. всё время удалял нулевой элемент, чтобы не вышло за границы списка.
+4
Aleksandr Zimin
10 мая 2018, 23:17решение
наверное поэтому (взято из Javadoc):
Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts one from their indices).
Во втором варианте при удалении первого элемента происходит сдвиг всего массива влево с изменением индекса (или может даже перестроение массива, надо смотреть реализацию).
Таким образом когда вы добегаете до 5000-й позиции массив уже меньше 5000 элементов, а счетчик продолжает расти и происходит выход за границы массива.
В данном случае лучше 10к раз удалить 0-й элемент.
В первом варианте, т.к. вы удаляете всегда последний элемент массива смещение не происходит.
+21
Сергеев ВикторMaster
10 мая 2018, 19:24
а вы смотрели, что на выходе после этих циклов?
0
Alexander Avdoshin
10 мая 2018, 19:38
В первом случае он сокращает размер массива а во втором вставлят null в места, которые я удаляю. Вы об этом?
0
Сергеев ВикторMaster
10 мая 2018, 20:15
это как? один метод ведет себя по разному в зависимости от внешнего цикла?
0
Alexander Avdoshin
10 мая 2018, 20:23
Понятия не имею, буду признателен, если дадите верный ответ.
0
Сергеев ВикторMaster
10 мая 2018, 20:50
так вы запустите код и посмотрите что в итоге остается в листах. Код можно и нужно запускать, чтобы его же проверить.
+3
Alexander Avdoshin
10 мая 2018, 20:53
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 5000, Size: 5000
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.remove(ArrayList.java:496)
at Test.remove10000(Test.java:45)
at Test.main(Test.java:12)
Не проходит код при запуске 2го варианта.
0
Сергеев ВикторMaster
10 мая 2018, 22:18
Что значит эта ошибка?
0
Alexander Avdoshin
10 мая 2018, 22:38
Что мы вышли за границы списка?
Отсюда вопрос - почему мы выходим за его границы?
0
Сергеев ВикторMaster
10 мая 2018, 22:56полезный
Список фиксированного размера?
Что происходит при удалении элемента?
+7
Alexander Avdoshin
10 мая 2018, 22:57
Не фиксированного и при удалении размер уменьшается?
0
Konstantin
20 июня 2018, 13:52
Благодарю за наводящие вопросы.
+2