В двух стилях ниже расположен объект Iterator
. Полезно ли проверять, пуста ли коллекция до итерации? Я не знаю, квалифицируется ли это как «преждевременная оптимизация». Надеюсь, кто-то с глубоким знанием коллекционеров мусора JVM может дать представление.Полезно проверить, пуста ли Java-коллекция пуста до начала итерации?
Кроме того, я не знаю, как обрабатывается компилятор Java для каждого цикла. Я предполагаю, что стиль B преобразован в стиль A автоматически. Но ... может быть, пустая проверка включена.
Петля стилизации
Collection<String> collection = ...
Iterator<String> iter = collection.iterator();
while (iter.hasNext()) {
String value = iter.next();
// do stuff
// maybe call iter.remove()
}
петля Стиль B
Collection<String> collection = ...
for (String value : collection) {
// do stuff
}
петли типа А (Modified)
Collection<String> collection = ...
if (!collection.isEmpty()) {
Iterator<String> iter = collection.iterator();
while (iter.hasNext()) {
String value = iter.next();
// do stuff
// maybe call iter.remove()
}
}
Loop Style B (Modified)
Collection<String> collection = ...
if (!collection.isEmpty()) {
for (String value : collection) {
// do stuff
}
}
Зачем проверять пустое, это защитное программирование в худшем случае !, проверка на 'null' - это одно, но проверка на пустое - это просто плохая практика. –
Почему? Я могу видеть выгоду ... вместо того, чтобы обращаться к итератору и проверять вызов метода, чтобы увидеть, есть ли 'next', что будет делать JVM для объекта (для объекта obj: objects)', это будет просто обойти весь этот код, если коллекция пуста ... насколько я вижу, это оптимизация, теперь, если она хорошая, это другое дело ... – mFeinstein