今天看下HashMap类的entrySet方法的实现。看的不太明白。
源码如下:
直接返回entrySet,但是这个entrySet是怎么来的,怎么存储数据的呢?
貌似整个过程中,就直接返回了entrySet,我们在put 的时候也看不到jdk将put的元素加入到entrySet中,那我们遍历的时候元素哪里来?
换个方式看下呢:
Iterator> iterator = map.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry next = iterator.next();
String key = next.getKey();
String value = next.getValue();
System.out.println("key = "+key+";value = "+value);}
也就是说最后是通过迭代器来实现数据的遍历的。
增强的for循环内部也是调用了iterator。
为什么keySet方式遍历Map的性能不如entrySet性能.
简单说就是keySet取值的时候,耗时。二者在此时的性能应该是相同的,但方式一再取得key所对应的value时,此时还要访问Map的这个方法,这时,方式一多遍历了一次table.
参照:http://www.mamicode.com/info-detail-2034228.html 浅谈HashMap原理,记录entrySet中的一些疑问
网友评论