检查一个集合在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