89

我有两种检查列表是否为空的方法

if (CollectionUtils.isNotEmpty(listName)) 

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

我的拱门告诉我前者比后者好。但我认为后者更好。

谁能澄清一下?

4

12 回答 12

149

绝对应该使用isEmpty(). 计算size()任意列表的 可能很昂贵。当然,即使验证它是否有任何元素也可能很昂贵,但是没有任何优化也不能size()提高速度,反之则不然。isEmpty()

例如,假设您有一个没有缓存大小LinkedList<E> 链表结构(而. 然后size()将成为 O(N) 操作,而isEmpty()仍然是O(1).

此外,当然,使用isEmpty()更清楚地说明了您真正感兴趣的内容。

于 2012-06-22T08:23:55.837 回答
66

CollectionUtils.isNotEmpty检查您的集合是否不为空且不为空。这比仔细检查更好,但前提是你的项目中有这个 Apache 库。如果你不那么使用:

if(list != null && !list.isEmpty())
于 2012-06-22T08:21:14.430 回答
12

除非您已经在使用 CollectionUtils,否则我会选择List.isEmpty()更少的依赖项。

性能方面的 CollectionUtils 会慢一点。因为它基本上遵循相同的逻辑,但有额外的开销。

所以这将是可读性与性能与依赖性。不过差别不大。

于 2012-06-22T08:21:12.017 回答
11

if (CollectionUtils.isNotEmpty(listName))

是相同的:

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

在第一种方法listName中可以为空,并且不会抛出空指针异常。在第二种方法中,您必须手动检查 null 。第一种方法更好,因为它需要你做的工作更少。使用.size() != 0是完全没有必要的,我也了解到它比使用慢.isEmpty()

于 2015-07-06T09:05:43.337 回答
7

如果您的项目中有 Apache 常用实用程序,请使用第一个。因为它更短并且与后者完全相同。两种方法之间没有任何区别,但它在源代码中的外观如何。

也是一个空支票使用

listName.size() != 0

不鼓励,因为所有集合实现都有

listName.isEmpty()

功能完全相同。

总而言之,如果您的类路径中有 Apache 通用工具,请使用

if (CollectionUtils.isNotEmpty(listName)) 

在任何其他情况下使用

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

您不会注意到任何性能差异。两条线的作用完全相同。

于 2012-06-22T08:24:53.183 回答
3

Apache Commons 的 CollectionUtils.isNotEmpty(Collection) 是一个 NULL-SAFE 检查

返回 TRUE 是 Collection/List 不为空且不为 null 如果 Collection 为 Null,则返回 FALSE

例子:

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)

于 2014-10-13T20:37:56.763 回答
1
isEmpty()

      Returns true if this list contains no elements.

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/List.html

于 2012-06-22T08:19:35.603 回答
1

在实践中这很重要的一个很好的例子是JDK 中的ConcurrentSkipListSet实现,它指出:

请注意,与大多数集合不同,size 方法不是恒定时间操作。

这是一个明显的例子,isEmpty()它比检查是否size()==0.

您可以直观地看到为什么在某些集合中可能会出现这种情况。如果是那种你必须遍历整个事物来计算元素的结构,那么如果你只想知道它是否为空,你可以在找到第一个后立即停止。

于 2014-12-17T12:33:33.120 回答
1

使用CollectionUtils.isEmpty(Collection coll)

空安全检查指定的集合是否为空。空返回真。

参数: coll - 要检查的集合,可以为 null

返回: 如果为空或 null,则返回 true

于 2017-07-11T11:09:25.397 回答
0

我会用第一个。很明显可以立即看到它的作用。我认为这里不需要空检查。

于 2012-06-22T08:19:41.427 回答
0

org.apache.commons.collections4.CollectionUtils isEmpty() 方法用于检查任何集合(List、Set 等)是否为空。它检查 null 以及集合的大小。CollectionUtils isEmpty() 是一个静态方法,它接受 Collection 作为参数。

于 2021-08-19T07:03:12.783 回答
-7

要检查集合是否为空,您可以使用方法:.count()。例子:

DBCollection collection = mMongoOperation.getCollection("sequence");
    if(collection.count() == 0) {
        SequenceId sequenceId = new SequenceId("id", 0);
        mMongoOperation.save(sequenceId);
    }
于 2016-02-03T04:42:39.470 回答