Если вы хотите избежать приведения, вам нужна обобщенная версия Iterator
, которая в вашем случае равна Iterator<Integer>
. Если вы посмотрите на javadoc метода List#iterator
, вы увидите, что он возвращает обобщенную версию.
Так что просто измените цикл for на
for(Iterator<Integer> i = list.iterator(); i.hasNext();)
и все прекрасно скомпилируется.
Пример Oracle иллюстрирует ту же проблему, с которой вы только что столкнулись. В ex1 ошибка компиляции вызвана отсутствием приведения, а в ex2 это решается с помощью обобщенной версии итератора