我有两种检查列表是否为空的方法
if (CollectionUtils.isNotEmpty(listName))
和
if (listName != null && listName.size() != 0)
我的拱门告诉我,前者比后者更好。但是我认为后者更好。
任何人都可以澄清一下吗?
我有两种检查列表是否为空的方法
if (CollectionUtils.isNotEmpty(listName))
和
if (listName != null && listName.size() != 0)
我的拱门告诉我,前者比后者更好。但是我认为后者更好。
任何人都可以澄清一下吗?
listname.isEmpty()呢?isEmpty是Collection界面中的一种方法
Answers:
您应该绝对使用isEmpty()。计算size()任意列表的可能会很昂贵。即使确认是否有任何元素可以是昂贵的,当然,但没有优化size()不能也让isEmpty()速度更快,而相反的情况并非如此。
例如,假设你有一个链表结构,它并没有缓存的大小(而LinkedList<E> 做)。然后size()将变为O(N)运算,而isEmpty()仍为O(1)。
当然,另外,使用isEmpty()状态可以更清楚地说明您实际感兴趣的内容。
List.size()==0vsList.isEmpty()性能参数是正确的,但这不能回答有关使用Apache commons-collection的问题,CollectionUtils.isEmpty或者CollectionUtils.isNotEmpty()
isEmpty为return size() == 0;。
CollectionUtils.isNotEmpty检查您的集合是否不为null也不为空。与仔细检查相比,这样做更好,但前提是您的项目中有此Apache库。如果您不这样做,请使用:
if(list != null && !list.isEmpty())
CollectionUtils.isEmpty(或CollectionUtils.isNotEmpty)的另一个优点是您的if条件分支较少,因此在测试中更容易达到良好的分支覆盖率。例如,Sonarqube最多报告75%的覆盖率,if (list==null || list.isEmpty())因为您不能同时有一个为空且不为空的列表。
除非您已经在使用CollectionUtils,否则我会寻求List.isEmpty()更少的依赖。
在性能方面,CollectionUtils会慢一些。因为它基本上遵循相同的逻辑,但是具有额外的开销。
因此,这将是可读性,性能和依赖关系。虽然没有太大的区别。
如果您的项目中具有Apache通用实用程序,请使用第一个。因为它更短,并且与后者完全相同。两种方法之间没有什么区别,但是它们在源代码内部的外观如何。
还用空支票
listName.size() != 0
不建议使用此方法,因为所有collection实现都具有
listName.isEmpty()
功能完全相同。
因此总而言之,如果您的类路径中仍然有Apache通用utils,请使用
if (CollectionUtils.isNotEmpty(listName))
在任何其他情况下使用
if(listName != null && listName.isEmpty())
您不会注意到任何性能差异。这两行的功能完全相同。
size()方法为O(n)。通常期望所有isEmpty()实现都是O(1)。
Apache Commons的CollectionUtils.isNotEmpty(Collection)是NULL-SAFE检查
如果集合/列表为非空且不为空,则返回TRUE;如果集合为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)
JDK中的ConcurrentSkipListSet实现是一个很好的例子,它说明了:
注意,与大多数集合不同,size方法不是恒定时间操作。
这是一个明显的情况,isEmpty()比检查是否有效size()==0。
您可以直观地了解为什么某些集合可能是这种情况。如果是那种必须遍历整个事物以计算元素的结构,那么如果您只想知道它是否为空,则可以在找到第一个元素后立即停止。
isEmpty()
Returns true if this list contains no elements.
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/List.html