我有两种检查列表是否为空的方法
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()==0
vsList.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