Перебор списка типов автобоксов в Java

#java #iteration

#java #итерация

Вопрос:

Если я заполню список следующим образом

         List<Integer> l = new ArrayList<>();
        for(int i = 0; i < 1000000;   i) {
            l.add(i);
        }
 

Каков наилучший способ итерации по этому списку (с точки зрения чистоты и эффективности кода) :

С типом autobox

         for(Integer i : l) {
            // do stuff...
        }
 

или с примитивным типом

         for(int i : l) {
            // do stuff...
        }
 

Комментарии:

1. Для меня это будет зависеть от того, что вам нужно i внутри цикла. Если вам нужен an int , объявите его an int . Если вам нужен an Integer , объявите его an Integer . Если вам нужно и то, и другое, я бы предпочел пойти навстречу Integer , но это будет зависеть.

Ответ №1:

На самом деле, первый цикл — for(Integer i : l) — не имеет автоматической упаковки, поскольку l является a List<Integer> . Автоматическая упаковка происходит, когда вы добавляете к этому элементы List .

С другой стороны, второй цикл — for(int i : l) — имеет автоматическую распаковку Integer элементов в int s.

Что касается того, какой из них лучше, это зависит от того, что вы собираетесь делать с элементами.

Если, например, вы собираетесь добавить их в другой List (или проверить, являются ли они ключами некоторых Map ), нет необходимости их распаковывать, поэтому вы можете использовать первый цикл.

Если, с другой стороны, вы собираетесь выполнять с ними числовые операции (например, вычислять их сумму), вам все равно придется их распаковывать, так что вы можете также перейти ко второму циклу.

Ответ №2:

я попробовал оба варианта для вычисления суммы списка, и это результат введите описание изображения здесь