JDK1.9 集合框架源码阅读——Map系列——有趣的问题及源码解答

Posted zhaolide

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK1.9 集合框架源码阅读——Map系列——有趣的问题及源码解答相关的知识,希望对你有一定的参考价值。

V get(Object key);
该方法将会返回Map中对应于key的value。如果这个key不存在,则返回null。

问题

那么问题来了,如果这个map本身允许null作为value呢?这样,当该方法返回null时,就会有两种情况,一种是不存在该key,第二种是该key对应的值就是null。

解答

官方源码注释给出了解决方法:

意思是说,当出现这种情况时,我们可以通过containsKey方法来区分这两种情况。

public Set<K> keySet()
该方法返回map的所有key组成的一个集合

我们知道,该方法返回的是一个Set类型的视图,对该set的任何修改都会映射到背后的map中,反之亦然。

问题

那么问题来了,为什么对set的操作都会映射到背后的map中呢?答案在Jdk的AbstractMap.java中:

我们可以看到,对set的所有操作,最终都是通过调用map的相应方法来实现的。因此,所有对set的操作都会映射到map中。



以上是关于JDK1.9 集合框架源码阅读——Map系列——有趣的问题及源码解答的主要内容,如果未能解决你的问题,请参考以下文章

集合框架系列 Map:TreeMap(1.8)

如果天空不是集合框架阅读列表整理

源码阅读Java集合 - ArrayList深度源码解读

HashMap与HashTable的哈希算法——JDK1.9源码阅读总结

JDK1.8JDK1.8集合源码阅读——Set汇总

java集合13——— Stack源码分析走一波