HashMap之entrySet( )底层实现原理分析
来源:互联网 发布:第三方微信软件 编辑:程序博客网 时间:2024/06/06 14:25
entrySet( )说明
在针对hashmap做遍历的时候我们常常会调用map对象.entrySet()方法来实现对Map.Entry接口对象实例的遍历,Map.Entry是Map接口里面的一个内部接口,该接口声明为范型。当我们获得了接口对象后遍可以调用接口方法getKey(), getValue()
entrySet( )底层源码分析
当我们追踪HashMap类中entrySet()方法时候可以发现
//return a set view of the mappings contained in this mappublic Set<Map.Entry<K,V>> entrySet() { Set<Map.Entry<K,V>> es; return (es = entrySet) == null ? (entrySet = new EntrySet()) : es; }
注释中说明了返回map包含的映射集合视图,进一步分析发现entrySet为类的属性,并未见在put()操作中为其赋值?实际上再发现有entrySet = new EntrySet()这一操作,EntrySet是HashMap中的内部类,发现其实现的一关键点细节
final class EntrySet extends AbstractSet<Map.Entry<K,V>> { public final void forEach(Consumer<? super Map.Entry<K,V>> action) { Node<K,V>[] tab; if (action == null) throw new NullPointerException(); if (size > 0 && (tab = table) != null) { int mc = modCount; for (int i = 0; i < tab.length; ++i) { for (Node<K,V> e = tab[i]; e != null; e = e.next) action.accept(e); } if (modCount != mc) throw new ConcurrentModificationException(); } }}
在进行foreach遍历EntrySet的时候时间上是会遍历table[],hashmap中实际具体数据都是存储在这个数组中,包括entry。这也进一步验证了那句话entrySet()该方法返回的是map包含的映射集合视图,视图的概念相当于数据库中视图及提供一个窗口,没有具体到相关数据,而真正获取数据还是从table[]中来。
阅读全文
0 0
- HashMap之entrySet( )底层实现原理分析
- HashMap底层之entrySet,keySet,value实现
- HashMap底层实现原理
- HashMap底层实现原理
- HashMap底层实现原理
- HashMap底层实现原理
- 实在没想到系列——HashMap实现底层细节之keySet,values,entrySet的一个底层实现细节
- HashMap(2): EntrySet、KeySet实现原理
- hashMap 底层实现分析
- Java之HashMap底层实现原理/HashMap、HashTable、HashSet
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- HashMap 源码分析 -- entrySet()
- JAVA HashMap底层实现原理
- hashMap的底层实现原理
- java面试之HashMap的实现原理和底层数据结构
- JAVA之HashMap实现原理分析-1
- 设计模式C++实现(1)——工厂模式
- PAT 1059 C语言竞赛
- 怎么安装Java的编译器?
- Java 并发 —— Thread、Executor、线程池
- 最长公共子序列(DP)
- HashMap之entrySet( )底层实现原理分析
- 执行mavenclean,install,生成项目jar文件
- java鬼混笔记:Hibernate:3、一对一关系之外键单向和双向关联
- 需要深入学习的开源项目
- C++学习笔记——正则表达式
- 使用BootStrap Inputfile 遇到的问题
- poj
- hdu 6143(2017多校联赛08-11)
- 吾爱破解160个crackme之005