为什么新的Map方法不会在LinkedHashMap上生成入口访问?

时间:2013-12-07 10:13:45

标签: java map java-8 linkedhashmap

Javadocs of LinkedHashMap in JDK8

  

调用put或get方法会导致访问相应的条目(假设在调用完成后它存在)。 putAll方法为指定映射中的每个映射生成一个条目访问,按照指定映射的条目集迭代器提供键 - 值映射的顺序。没有其他方法可以生成入口访问。

为什么新的Map方法不会在LinkedHashMap上生成入口访问?特别是getOrDefault()。这是否违反了最不惊讶的原则?

@PeterLawrey从源代码中可以清楚地看到:

HashMap中覆盖

getOrDefault

public V getOrDefault(Object key, V defaultValue) {
     Node<K,V> e;
     return (e = getNode(hash(key), key)) == null ? defaultValue : e.value;
}

LinkedHashMap扩展HashMap并仅覆盖get()

public V get(Object key) {
    Node<K,V> e;
    if ((e = getNode(hash(key), key)) == null)
        return null;
    // generating entry access -- comment by me
    if (accessOrder)
        afterNodeAccess(e);
    return e.value;
}

因此,getOrDefault()不会生成条目访问。

0 个答案:

没有答案