lev*_*tov 7 java map linkedhashmap java-8
调用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().