Каков наилучший способ проверить, является ли список нулевым или нет перед циклом? - PullRequest
0 голосов
/ 29 марта 2011

Я знаю, что это примитивный вопрос, но я хочу изучить самый умный способ.

Я хочу перебрать ArrayList<Integer> intList и он может быть нулевым.У меня есть 2 способа сделать это

if(intList != null) {
     for(int i = 0; i < intList.size(); i++){
             System.out.println(intList.get(i));
     }
}

и

for (int i = 0; intList != null && i < intList.size(); i++){
     System.out.println(intList.get(i));
}

Первый способ мне кажется более привлекательным.Как вы думаете?Каковы ваши реализации в этой ситуации?

Извините, если это дублирующий вопрос, но я не могу найти один

Спасибо

Ответы [ 7 ]

4 голосов
/ 29 марта 2011

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

Как правило, я бы старался избегать List (или любого другого Collection объекта, на самом деле), являющегося null. При оценке List (что неожиданно и неожиданно null) вы, скорее всего, захотите прервать работу до того, как произойдет какая-либо обработка, поэтому ни один из циклов циклического сброса не произойдет.

2 голосов
/ 29 марта 2011

В нашей компании есть одно правило разработки:

  • Если написана функция, которая возвращает список или массив, никогда не возвращает ноль !Возврат пустого списка или пустого массива в случае, когда нет элементов для возврата.

Это можно сделать с минимальными издержками, как здесь:

public List<String> getNames() {
    if( !loaded ) {
        return Collections.emptyList();
    }
    ...
}

Если применяетсяправильно, вам не нужно проверять нулевые списки.Нам не нужно.

РЕДАКТИРОВАТЬ: Да, и возвращаться к вашему поднятому вопросу: используйте первый вариант, он намного понятнее и быстрее, потому что проверка нуляэто нужно сделать только один раз (может случиться так, что компилятор все равно его разметит, но в варианте 1 вы можете быть уверены).

2 голосов
/ 29 марта 2011

Я предпочитаю первый, поскольку полный сегмент кода, скорее всего, будет:

if(intList != null) {
 for(int i = 0; i < intList.size(); i++){
         System.out.println(intList.get(i));
 }
}
else {
   //Do something here.
}
0 голосов
/ 29 марта 2011

Первая форма более читабельна - цель намного понятнее.

Первая форма может также быть быстрее, поскольку вторая форма говорит о том, что intList не равно нулю каждый раз, когда вы совершаете цикл . (JIT-компилятор может оптимизировать ненужные тесты ... но зачем полагаться на это.)

0 голосов
/ 29 марта 2011

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

В конце дня оба будут делать одно и то же, поэтому вам решать, какой код вы хотите использовать. Я бы предложил придерживаться первого, так как он более дружественен для разработчиков из-за читабельности.

0 голосов
/ 29 марта 2011

Для меня первый вариант понятнее и легче для чтения и понимания.

0 голосов
/ 29 марта 2011

я предпочитаю первый, так как в основном я использую первый процесс

...