在以下用例中使用CollectionUtils.isNotEmpty(coll)
而不是coll != null
的建议很多。
if (CollectionUtils.isNotEmpty(coll)) {
for (String str : coll) {
}
}
而不是
if (coll != null) {
for (String str : coll) {
}
}
在这里使用CollectionUtils.isNotEmpty(coll)
代替其他有什么理由/优势吗?感谢。
答案 0 :(得分:4)
这里没有真正的优势。即使有,也会非常小。它只是阻止创建Iterator
并执行分支指令,这就是它的全部内容。
仅当集合为空时才会出现这种小优势。以下循环:
for (String str : coll) {
...
}
相当于:
for (Iterator<String> iterator = col.iterator(); iterator.hasNext();) {
String str = iterator.next();
...
}
当集合为空时,CollectionUtils.isNotEmpty(coll)
上的检查会阻止循环执行。因此,在内存中不会创建Iterator
,也不会调用hasNext()
。对O(1)
coll.isEmpty()
的{{1}}来说,这需要付费。
答案 1 :(得分:2)
反编译显示
public static boolean isEmpty(Collection coll) {
return coll == null || coll.isEmpty();
}
答案 2 :(得分:1)
问题是,当集合不为空时,集合仍然可以为空。因此,在您的情况下,这取决于您的选择。
答案 3 :(得分:0)
如上所述,这取决于您要测试的内容以及逻辑的构造方式。
假设您的示例
if (CollectionUtils.isNotEmpty(coll)) {
for (String str : coll) {
System.out.println("Branch 1. Collection is not empty.");
}
}
else {
System.out.println("Branch 2. Collection is empty.");
}
在此示例中,我们可以看到总是 Branch1或Branch2被执行。
如果我们使用null表达式,那么如果coll
不是null但为空,结果将有所不同
if (coll != null) {
for (String str : coll) {
System.out.println("Branch1. Collection is not empty.");
}
}
else {
System.out.println("Branch2. Collection is empty.");
}
如果集合coll
不为空但为空,则也没有执行Branch1或Branch2,因为条件coll != null
为真,但是在循环for
中甚至没有一个通过。
当然,if
表达式coll != null && coll.isNotEmpty()
与CollectionUtils.isNotEmpty(coll)
的工作相同。
因此,仅在集合coll != null
的情况下,建议不要对null使用test。这是极端条件处理不当的情况,可能是产生不良结果的原因。