我有两种检查List是否为空的方法
if (CollectionUtils.isNotEmpty(listName))
和
if (listName != null && listName.size() != 0)
我的拱门告诉我,前者比后者好。但我认为后者更好。
任何人都可以澄清一下吗?
答案 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
}
答案 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);
}