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特定检查,是否有任何性能提升?
答案 0 :(得分:4)
在您建议的实现中,如果e.getValue().equals(value)
为空,NullPointerException
将抛出e.getValue()
,这就是为什么必须有单独的逻辑来处理null。
这不是性能问题。这是一个正确的问题。