在java树映射上,我应该在清除之前检查大小吗?

在java树映射上,我应该在清除之前检查大小吗?,java,Java,我想我可以直接打电话给clear而不是 if (tmap.size() > 0) { tmap.clear(); } 还是一个更有效?您将一无所获,因为TreeMap.clear()在开销方面没有任何好处: public void clear() { modCount++; size = 0; root = null; } 因此,只需使用tmap.clear(),就可以使代码易于阅读 JDK集合类的编写是为了尽可能地优化。 因此,您通常不需要担心基本的优

我想我可以直接打电话给clear而不是

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类被设计为高效编写。