HashMap-entrySet( )原理

HashMap-entrySet( )原理这是遍历 hashMap 常用的方式 可以看到 for 循环的是 entrySet 但是看 entrySet 方法中直接返回了一个 entrySet entrySet 并没有存入数据过 那上面的遍历是怎么取到数据的

大家好,欢迎来到IT知识分享网。

发现很多讲entrySet原理的文章都讲到entrySet方法返回map包含的映射集合视图就没了,并没有讲到为什么entrySet没有赋值却可以取到数据,这里简单梳理下。

public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("1", "a"); for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("k:" + entry.getKey() + "\tv:" + entry.getValue()); } }

这是遍历hashMap常用的方式,可以看到for循环的是entrySet,但是看entrySet()方法中直接返回了一个entrySet,entrySet并没有存入数据过,那上面的遍历是怎么取到数据的?

HashMap-entrySet( )原理

HashMap-entrySet( )原理

答案就是编译器做了优化,会通过Iterator模式迭代遍历,最终操作的其实是hashmap底层结构中的table数组,并没有开辟新的空间。下面看下具体过程

1.看下上边代码对应的字节码指令(javap -verbose xx.class)。可以看到编译器优化之后最终通过Iterator遍历了,调用了hasNext和next方法。

HashMap-entrySet( )原理

2.entrySet方法返回的Set是EntrySet。EntrySet继承了AbstractSet,重写了iterator方法,最终使用的是EntryIterator迭代器,EntryIterator又继承了HashIterator,重新来next方法。在next方法中,调用了nextNode方法,nextNode中才是具体访问hashmap的table数组,获取元素。

HashMap-entrySet( )原理

EntrySet

HashMap-entrySet( )原理

EntryIterator

HashMap-entrySet( )原理

nextNode

3.debug验证下

HashMap-entrySet( )原理

HashMap-entrySet( )原理

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/189593.html

(0)
上一篇 2025-10-03 07:45
下一篇 2025-10-03 08:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信