AbstractMap的containsValue()方法实现

时间:2015-05-16 16:55:11

标签: java dictionary

containsValue()已在AbstractMap课程中实施,如下所示:

public boolean containsValue(Object value) {
    Iterator<Entry<K,V>> i = entrySet().iterator();
    if (value==null) {
        while (i.hasNext()) {
            Entry<K,V> e = i.next();
            if (e.getValue()==null)
                return true;
        }
    } else {
        while (i.hasNext()) {
            Entry<K,V> e = i.next();
            if (value.equals(e.getValue()))
                return true;
        }
    }
    return false;
}

如果实施如下,该怎么办?

public boolean containsValue(Object value) {
    Iterator<Entry<K,V>> i = entrySet().iterator();
    while (i.hasNext()) {
        Entry<K,V> e = i.next();
        if (e.getValue().equals(value))
            return true;
    }
    return false;
}

通过在原始方法中实现null特定检查,是否有任何性能提升?

1 个答案:

答案 0 :(得分:4)

在您建议的实现中,如果e.getValue().equals(value)为空,NullPointerException将抛出e.getValue(),这就是为什么必须有单独的逻辑来处理null。

这不是性能问题。这是一个正确的问题。