读书人

深入Java会合学习系列:HashMap的实现

发布时间: 2013-07-09 09:50:48 作者: rapoo

深入Java集合学习系列:HashMap的实现原理

?原文章链接:http://zhangshixi.iteye.com/blog/672697,转载只为学习记录

1.??? HashMap概述:

???HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

?

2.??? HashMap的数据结构:

???在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

深入Java会合学习系列:HashMap的实现原理

?? 从上图中可以看出,HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。

?? 源码如下:

?

?深入Java会合学习系列:HashMap的实现原理深入Java会合学习系列:HashMap的实现原理
    ?深入Java会合学习系列:HashMap的实现原理深入Java会合学习系列:HashMap的实现原理
      ?深入Java会合学习系列:HashMap的实现原理深入Java会合学习系列:HashMap的实现原理
        ?深入Java会合学习系列:HashMap的实现原理深入Java会合学习系列:HashMap的实现原理
          ?深入Java会合学习系列:HashMap的实现原理深入Java会合学习系列:HashMap的实现原理
            ?深入Java会合学习系列:HashMap的实现原理深入Java会合学习系列:HashMap的实现原理
              ?深入Java会合学习系列:HashMap的实现原理深入Java会合学习系列:HashMap的实现原理
                ?深入Java会合学习系列:HashMap的实现原理深入Java会合学习系列:HashMap的实现原理
                  ?深入Java会合学习系列:HashMap的实现原理深入Java会合学习系列:HashMap的实现原理
                    ?深入Java会合学习系列:HashMap的实现原理深入Java会合学习系列:HashMap的实现原理
                      ?深入Java会合学习系列:HashMap的实现原理深入Java会合学习系列:HashMap的实现原理
                        final Entry<K,V> nextEntry() { if (modCount != expectedModCount) throw new ConcurrentModificationException();

                        ?

                        ?? 在HashMap的API中指出:

                        ?? 由所有HashMap类的“collection 视图方法”所返回的迭代器都是快速失败的:在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器本身的 remove 方法,其他任何时间任何方式的修改,迭代器都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒在将来不确定的时间发生任意不确定行为的风险。

                        ?? 注意,迭代器的快速失败行为不能得到保证,一般来说,存在非同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序的做法是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。

                        ?

                        ?

                        参考资料:

                        JDK API HashMap???? HashMap 源代码???? 深入理解HashMap

                        通过分析 JDK 源代码研究 Hash 存储机制??? java.util.HashMap源码要点浅析

读书人网 >编程

热点推荐