在java树映射上,我应该在清除之前检查大小吗?
我想我可以直接打电话给clear而不是在java树映射上,我应该在清除之前检查大小吗?,java,Java,我想我可以直接打电话给clear而不是 if (tmap.size() > 0) { tmap.clear(); } 还是一个更有效?您将一无所获,因为TreeMap.clear()在开销方面没有任何好处: public void clear() { modCount++; size = 0; root = null; } 因此,只需使用tmap.clear(),就可以使代码易于阅读 JDK集合类的编写是为了尽可能地优化。 因此,您通常不需要担心基本的优
if (tmap.size() > 0) {
tmap.clear();
}
还是一个更有效?您将一无所获,因为
TreeMap.clear()
在开销方面没有任何好处:
public void clear() {
modCount++;
size = 0;
root = null;
}
因此,只需使用tmap.clear(),就可以使代码易于阅读代码>
JDK集合类的编写是为了尽可能地优化。
因此,您通常不需要担心基本的优化,因为这些都是必须完成的。
例如,看看HashMap.clear()
逻辑,clear()
操作需要更多的开销:清除表(bucket)。
因此,在执行以下操作之前,将检查地图的大小:
public void clear() {
Node<K,V>[] tab;
modCount++;
if ((tab = table) != null && size > 0) {
size = 0;
for (int i = 0; i < tab.length; ++i)
tab[i] = null;
}
}
public void clear(){
节点[]选项卡;
modCount++;
如果((制表符=表格)!=null&&size>0){
尺寸=0;
对于(int i=0;i
为什么不试试呢?请注意,在执行tmap.size()>0测试时,TreeMap中的“modCount”没有更改,因此,此测试可能会在非常特殊的情况下防止ConcurrentModificationException。我更希望获得ConcurrentModificationException,因为它突出了地图使用的一个基本问题。我正处于时间紧迫期,我的同事认为在清除之前检查是有益的,虽然我会利用强大的stack overfill社区的脑力来确定最佳实践。即使它确实产生了不同的效果,我也希望库的作者会用if(size()>0)开始他们的实现
在它们的实现中-因此,只要调用clear()
…@moilejter,您仍然可以做正确的事情。JDK类被设计为高效编写。