2012-06-22 60 views
39

我有比较两种方法,如果列表为空或不检查集合是否是在Java空:这是最好的方法

if (CollectionUtils.isNotEmpty(listName)) 

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

我的弓告诉我,前者比后者好。

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

+0

为什么你认为 “后者” 更好? – ant

+0

OP不认为 –

+3

为什么不'listname.isEmpty()'? 'isEmpty'是Collection接口中的一种方法 – ccheneson

回答

102

你应该绝对使用isEmpty()。计算任意列表的size()可能会很昂贵。即使验证是否有任何元素可以价格昂贵,当然,但没有优化size()哪些不能使isEmpty()更快,反之则不是这种情况。

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

此外,当然,使用isEmpty()更清楚地表明您实际上感兴趣的内容。

0

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

9

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

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

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

+0

20年来,作为开发人员和使用CollectionUtils的习惯让我变得懒惰。甚至没有注意到标准的List.isEmpty()!永远不要老练学习。谢啦!我将改变这一点在我的头上:-D – Lawrence

+6

List.isEmpty()与CollectionUtils.isEmpty()不一样!后者将处理收集无效的情况,前者将抛出NPE。 – Starkii

35

CollectionUtils.isNotEmpty检查您的集合是否为空且不为空。这与双重检查相比要好一些,但前提是你的项目中有这个Apache库。如果你不那么使用:

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

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

而且使用

listName.size() != 0 

一个空的检查是气馁,因为所有集合实现有

listName.isEmpty() 

功能不完全相同。

因此,所有的一切,如果你在你的类路径中的Apache常见utils的,无论如何,使用

if (CollectionUtils.isNotEmpty(listName)) 

在任何其他情况下使用

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

你不会注意到任何性能差异。两条线完全相同。

+1

有''size()'方法是O(n)的集合。通常预计所有'isEmpty()'实现都将是O(1)。 –

2

阿帕奇百科全书CollectionUtils.isNotEmpty(集合)是一个NULL-SAFE检查

返回TRUE是Collection /列表不空不空 返回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)

1

良好EXA哪里该事项在实践mple是在JDK中,其中列明了ConcurrentSkipListSet implementation

要注意的是,与大多数collection不同,size方法不是一个固定时间操作。

这是一个明确的情况,其中isEmpty()比检查size()==0效率高得多。

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

6

if (CollectionUtils.isNotEmpty(listName))

是一样的:

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

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

0

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

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

使用CollectionUtils.isEmpty(收藏科尔)

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

参数: 科尔 - 集检查,可以为null

返回: 真,如果为空或null

相关问题