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

lev*_*tov 7 java map linkedhashmap java-8

LinkedHashMapJDK8中的Javadocs:

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

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

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

getOrDefault被覆盖HashMap:

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

LinkedHashMapHashMap仅扩展和覆盖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;
}
Run Code Online (Sandbox Code Playgroud)

因此,不会生成入口访问getOrDefault().