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哪里赋值,要看其它方法的的源码.