java中关于hashmap中的entrySet的疑问

hashmap中有个entrySet,翻遍了源码也只看到了声明了这个属性,没有任何赋值操作。

 private transient Set<Map.Entry<K,V>> entrySet = null;

在我们调用entrySet遍历的时候却可以得到map中存放的相关键值对

 public Set<Map.Entry<K,V>> entrySet() {
        Set<Map.Entry<K,V>> es = entrySet;
        return es != null ? es : (entrySet = new EntrySet());
    }

请教一下,这个entrySet到底是在哪里赋的值。

问题已经解决了 http://blog.sina.com.cn/s/blog_60efd9b70102vd5z.html

你可以看看源代码,里面有相关的赋值

hashmap中的Set>是用于双列集合遍历时运用迭代器itteator时候用的,因为iterator()迭代器方法只能单列集合才能调用,因此hashmap需要
利用Set>转换成set集合的键值对,然后利用getKey()和getValue()方法分别获取相应的键和值.

后面的new操作就是赋值过程啊

Set> es = entrySet; //直接entrySet赋值
return es != null ? es : (entrySet = new EntrySet());//如果es不为空就es,否则new EntrySet();

至于entrySet哪里赋值,要看其它方法的的源码.