HashMap之entrySet( )底层实现原理分析
2017-08-17 23:22
507 查看
entrySet( )说明
在针对hashmap做遍历的时候我们常常会调用map对象.entrySet()方法来实现对Map.Entry接口对象实例的遍历,Map.Entry是Map接口里面的一个内部接口,该接口声明为范型。当我们获得了接口对象后遍可以调用接口方法getKey(), getValue()
entrySet( )底层源码分析
当我们追踪HashMap类中entrySet()方法时候可以发现
注释中说明了返回map包含的映射集合视图,进一步分析发现entrySet为类的属性,并未见在put()操作中为其赋值?实际上再发现有entrySet = new EntrySet()这一操作,EntrySet是HashMap中的内部类,发现其实现的一关键点细节
在进行foreach遍历EntrySet的时候时间上是会遍历table[],hashmap中实际具体数据都是存储在这个数组中,包括entry。这也进一步验证了那句话entrySet()该方法返回的是map包含的映射集合视图,视图的概念相当于数据库中视图及提供一个窗口,没有具体到相关数据,而真正获取数据还是从table[]中来。
在针对hashmap做遍历的时候我们常常会调用map对象.entrySet()方法来实现对Map.Entry接口对象实例的遍历,Map.Entry是Map接口里面的一个内部接口,该接口声明为范型。当我们获得了接口对象后遍可以调用接口方法getKey(), getValue()
entrySet( )底层源码分析
当我们追踪HashMap类中entrySet()方法时候可以发现
//return a set view of the mappings contained in this map public 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[]中来。
相关文章推荐
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- 简单分析Java的HashMap.entrySet()的实现
- Java面试绕不开的问题: Java中HashMap底层实现原理(JDK1.8)源码分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- (转载)Java中HashMap底层实现原理(JDK1.8)源码分析
- HashMap实现原理分析
- HashMap实现原理分析(转自 Alpha's 学习笔记 )
- HashMap实现原理分析
- HashMap实现原理分析
- HashMap底层实现(源码分析)
- HashMap实现原理分析
- HashMap实现原理分析(面试问题:两个hashcode相同 的对象怎么存入hashmap的)
- HashMap实现原理分析
- HashMap的实现原理和底层数据结构
- HashMap实现原理分析