HashMap是如何维护EntrySet的

今天看下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中的一些疑问

https://blog.csdn.net/lwj_zeal/article/details/72898198

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 实际上,HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash 算...
    曹振华阅读 7,196评论 1 37
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,899评论 18 399
  • 最近因为内部矛盾,心情一直不好,在加上代购这摊子事最近有点忙,孩子依然是我一个人再带,精神和肉体都有些吃力! 越来...
    莫斯科的犟牛阅读 4,294评论 2 9
  • 规划风险管理 一、什么是规划风险管理 是定义如何实施项目风险管理活动的过程 二、为什么要规划风险管理 确保风险管理...
    河豚有毒阅读 4,276评论 0 0
  • 最近一段时间感冒了,吃了几天药,最近才好过来,在这感冒的几天,让我对身体健康有了重新的反思。 我现在才二十出头,是...
    小拾_阅读 3,712评论 6 2