#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
внутри цикла. Если вам нужен anint
, объявите его anint
. Если вам нужен anInteger
, объявите его anInteger
. Если вам нужно и то, и другое, я бы предпочел пойти навстречуInteger
, но это будет зависеть.
Ответ №1:
На самом деле, первый цикл — for(Integer i : l)
— не имеет автоматической упаковки, поскольку l
является a List<Integer>
. Автоматическая упаковка происходит, когда вы добавляете к этому элементы List
.
С другой стороны, второй цикл — for(int i : l)
— имеет автоматическую распаковку Integer
элементов в int
s.
Что касается того, какой из них лучше, это зависит от того, что вы собираетесь делать с элементами.
Если, например, вы собираетесь добавить их в другой List
(или проверить, являются ли они ключами некоторых Map
), нет необходимости их распаковывать, поэтому вы можете использовать первый цикл.
Если, с другой стороны, вы собираетесь выполнять с ними числовые операции (например, вычислять их сумму), вам все равно придется их распаковывать, так что вы можете также перейти ко второму циклу.