Когда вы удаляете элементы и продолжаете перебирать один и тот же список, вы должны учитывать, как структуры данных индексируют свои элементы.
Проблема с вашим кодом заключается в том, что при удалении элемента 2 третий элемент становится вторым элементом.Потому что, когда вы удаляете элемент из списка, все последующие элементы будут сдвигаться, чтобы занять его место.Если вы попытаетесь удалить предпоследний элемент, вы получите исключение.Чтобы избавиться от этой головной боли, попробуйте повторить список в обратном порядке.
for(int i = list.size(); i >= 0; i--) {
// do stuff here, like removing
}