检查一个集合在java中是否为空:哪一个是最好的方法

我有两种比较列表是否为空的方法

if (CollectionUtils.isNotEmpty(listName)) 

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

我的曲拱告诉我,前者比后者好。

但我认为后者更好。 任何人都可以请澄清一下。

你应该绝对使用isEmpty() 。 计算任意列表的size()可能会很昂贵。 当然,即使validation它是否有任何元素也可能是昂贵的,但是没有优化size() ,这不能使isEmpty()更快,反之则不然。

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

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

CollectionUtils.isNotEmpty检查您的集合是否不为空而不是空的。 这比双重检查更好,但只有在你的项目中有这个Apache库。 如果你不这样使用:

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

除非你已经使用CollectionUtils,否则我会去List.isEmpty() ,减less依赖。

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

所以这将是可读性与性能与依赖关系。 虽然没有太大的区别。

如果你的项目中有Apache常用工具,而使用第一个工具。 因为它更短,并且与后者完全一样。 这两种方法之间不会有任何区别,但它在源代码中看起来如何。

也是一个空的检查使用

 listName.size() != 0 

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

 listName.isEmpty() 

function完全一样。

所以总而言之,如果你的classpath中有Apache常用的utils,那就用吧

 if (CollectionUtils.isNotEmpty(listName)) 

在任何其他情况下使用

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

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

if (CollectionUtils.isNotEmpty(listName))

是相同的:

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

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

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

返回TRUE是集合/列表不为空,非空值如果集合为空,则返回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)

 isEmpty() Returns true if this list contains no elements. 

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

我会用第一个。 很明显,马上看到它的作用。 我不认为这里的空检查是必要的。

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

请注意,与大多数collections不同,尺寸方法不是一个常量操作。

这是一个明确的情况,其中isEmpty()比检查size()==0更有效。

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

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

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

使用CollectionUtils.isEmpty(Collection coll)

如果指定的集合是空的,则为空安全检查。 空值返回true。

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

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