Mac OS 上的 JDK 8,查看 HashMap.java 中的以下代码:
public Set<K> keySet() {
Set<K> ks = keySet;
if (ks == null) {
ks = new KeySet();
keySet = ks;
}
return ks;
}
Run Code Online (Sandbox Code Playgroud)
对返回的 ks 的任何更改都将反映在 keySet 中,因为它们始终指向相同的底层集合,如果这是真的,可以写成:
public Set<K> keySet() {
if (keySet == null) {
keySet = new KeySet();
}
return keySet;
}
Run Code Online (Sandbox Code Playgroud)
两个代码片段的行为是否相同?
如果是这样,为什么HashMap使用第一个变体而不是第二个变体?