检查Java中的集合是否为空:哪种方法最好?

时间:2012-06-22 08:17:35

标签: java collections is-empty

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

if (CollectionUtils.isNotEmpty(listName)) 

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

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

任何人都可以澄清一下吗?

11 个答案:

答案 0 :(得分:126)

绝对使用isEmpty()。计算任意列表的size()可能很昂贵。当然,即使验证它是否有任何元素也很昂贵,但size()无法优化 使isEmpty()更快而情况恰恰相反。

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

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

答案 1 :(得分:53)

CollectionUtils.isNotEmpty检查您的集合是否为空且不为空。与双重检查相比,这更好,但前提是您的项目中有此Apache库。如果不这样做,请使用:

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

答案 2 :(得分:12)

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

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

因此,可读性与性能与依赖性相比。虽然没有太大的区别。

答案 3 :(得分:9)

if (CollectionUtils.isNotEmpty(listName))

与:

相同

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

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

答案 4 :(得分:6)

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

使用

进行空检查
listName.size() != 0

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

listName.isEmpty()

完全相同的功能。

总而言之,如果你的类路径中有Apache common utils,请使用

if (CollectionUtils.isNotEmpty(listName)) 

在任何其他情况下使用

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

您不会注意到任何性能差异。两条线都完全一样。

答案 5 :(得分: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)

答案 6 :(得分:1)

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

  

请注意,与大多数集合不同,size方法不是常量操作。

这是一个明显的例子,isEmpty()比检查size()==0更有效。

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

答案 7 :(得分:1)

使用 CollectionUtils.isEmpty(Collection coll)

Null-safe检查指定的集合是否为空。 Null返回true。

<强>参数: coll - 要检查的集合,可能为null

<强>返回: 如果为空或为空,则为true

答案 8 :(得分:0)

isEmpty()

      Returns true if this list contains no elements.

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

答案 9 :(得分:0)

我会使用第一个。很明显,它立即看到了它的作用。我不认为这里需要进行空检查。

答案 10 :(得分:-1)

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

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