在以下代码段中,检查dic.isEmpty()是否会导致任何性能改进?
for (Map<String, String> dic : dics) {
if (!dic.isEmpty()) {
Iterator<Map.Entry<String, String>> it = dic.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> pair = it.next();
Log.d("Substitute", pair.getKey() + " => " + pair.getValue());
}
}
}
毕竟,如果map / dic为空,则不会输入while()循环,所以看起来对dic.isEmpty()的检查是多余的 - 除非有其它理由吗?
答案 0 :(得分:2)
这是多余的。我会说,把它留下来。这有点过早的微观优化。
由于在这种情况下不应将空地图视为特殊情况,isEmpty
只会使代码imo混乱。
答案 1 :(得分:2)
尝试过早优化代码。
您的地图要么总是空的,要么不是空的:
如果它为空,则返回“无项目”迭代器可能会返回相同的静态“空迭代器”(Collections.EmptyIterator),因此对内存的影响可以忽略不计。
< / LI>如果已满,则检查只会减慢对所需迭代器的访问速度。
主要问题是如果另一个线程在检查为空和抓取迭代器之间添加项目,它可能会招致竞争条件。也就是说,返回null迭代器的成本很可能是微不足道的(许多调优集合返回一个单独的null迭代器),因此额外的检查是过度的。