Подтвердить что ты не робот

Проверка, является ли коллекция пустой в Java: какой метод лучше?

У меня есть два способа проверить, пуст ли список или нет

if (CollectionUtils.isNotEmpty(listName)) 

а также

if (listName != null && listName.size() != 0)

Моя арка говорит мне, что первое лучше, чем второе. Но я думаю, что последний лучше.

Может кто-нибудь уточнить, пожалуйста?

4b9b3361

Ответ 1

Вы должны абсолютно использовать isEmpty(). Вычисление size() произвольного списка может быть дорогостоящим. Конечно, даже проверка того, имеет ли он какие-либо элементы, может быть дорогостоящей, но нет оптимизации для size(), которая также не может сделать isEmpty() быстрее, тогда как обратное не так.

Например, предположим, что у вас есть связанная структура списка, которая не кэшировала размер (тогда как LinkedList<E> делает). Тогда size() станет операцией O (N), тогда как isEmpty() будет O(1).

Кроме того, конечно, использование isEmpty() указывает на то, что вы действительно заинтересованы более четко.

Ответ 2

CollectionUtils.isNotEmpty проверяет, не является ли ваша коллекция пустой, а не пустой. Это лучше сравнить с двойной проверкой, но только если у вас есть эта библиотека Apache в вашем проекте. Если вы этого не сделаете, используйте:

if(list != null && !list.isEmpty())

Ответ 3

Если вы уже используете CollectionUtils, я бы пошел на List.isEmpty(), меньше зависимостей.

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

Таким образом, это будет читабельность против производительности и зависимостей. Однако не большая разница.

Ответ 4

if (CollectionUtils.isNotEmpty(listName))

То же, что и:

if(listName != null && !listName.isEmpty())

В первом подходе listName может быть null и исключение null-указателя не будет выбрано. Во втором подходе вам нужно проверить значение null вручную. Первый подход лучше, потому что он требует от вас меньше работы. Использование .size() != 0 - это что-то ненужное, также я узнал, что он медленнее, чем использование .isEmpty()

Ответ 5

Если у вас есть общие утилиты Apache в вашем проекте, используйте первый. Потому что он короче и точно такой же, как и последний. Между этими методами не будет никакой разницы, но как это выглядит внутри исходного кода.

Также пустая проверка с использованием

listName.size() != 0

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

listName.isEmpty()

которая делает то же самое.

Итак, в общем, если у вас есть общие утилиты Apache в вашем пути к классам, используйте

if (CollectionUtils.isNotEmpty(listName)) 

в любом другом случае используйте

if(listName != null && listName.isEmpty())

Вы не заметите разницы в производительности. Обе строки делают то же самое.

Ответ 6

Коллекция коллекций ApacheUtils.isNotEmpty(коллекция) - это проверка NULL-SAFE

Возвращает TRUE: коллекция/список не пустая и не-null Возвращает FALSE, если коллекция Null

Пример:

List<String> properties = new ArrayList();
...
if (CollectionUtils.isNotEmpty(properties)) {
  // process the list
} else {
 // list is null or empty
}

См: https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/CollectionUtils.html#isNotEmpty(java.util.Collection)

Ответ 7

Хорошим примером того, что это на практике, является ConcurrentSkipListSet реализация в JDK, в котором говорится:

Остерегайтесь того, что в отличие от большинства коллекций метод размера не является операцией с постоянным временем.

Это явный случай, когда isEmpty() намного эффективнее проверки size()==0.

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

Ответ 8

Используйте CollectionUtils.isEmpty(Collection coll)

Нулевая проверка, если указанная коллекция пуста. Null возвращает true.

Параметры: coll - сбор для проверки, может быть null

Возврат: true, если пусто или null

Ответ 10

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

Ответ 11

Проверить коллекцию пуст, вы можете использовать метод:.count(). Пример:

DBCollection collection = mMongoOperation.getCollection("sequence");
    if(collection.count() == 0) {
        SequenceId sequenceId = new SequenceId("id", 0);
        mMongoOperation.save(sequenceId);
    }