HashMap#keySet()是如何获取到map的key集合

clipboard.png

源码中通过ks = new KeySet()来创建KeySet()的对象,但是KeySet的默认构造方法并没有做啥事,他是怎么知道mapkey集合的。断点打在ks = new KeySet(),执行完该语句就可以知道值。有点不是明白。

阅读 3.4k
1 个回答

你确定没忽略什么???

public Set<K> keySet() {
    Set<K> ks;
    // keySet为null的时候才会初始化一个KeySet对象,否则返回的是keySet;keySet不是在这里赋值的
    return (ks = keySet) == null ? (keySet = new KeySet()) : ks;
}

你上面打断点在ks = new KeySet()的话,只有keySetnull才会执行到,建议你从上面Set<K> ks = keySet开始打断点

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏