HashMap的实现原理
来源:互联网 发布:ec软件 编辑:程序博客网 时间:2024/06/05 18:20
1. 原理
HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。
//HashMap的主干数组,可以看到就是一个Entry数组,初始值为空数组{},主干数组的长度一定是2的次幂,至于为什么这么做,后面会有详细分析。transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;
Entry是HashMap中的一个静态内部类。代码如下
static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next;//存储指向下一个Entry的引用,单链表结构 int hash;//对key的hashcode值进行hash运算后得到的值,存储在Entry,避免重复计算 /** * Creates new entry. */ Entry(int h, K k, V v, Entry<K,V> n) { value = v; //① next = n; //② key = k; //③ hash = h; //④ } //判断Entry是否相等等方法...
所以,HashMap的整体结构如下
简单来说,HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度依然为O(1),因为最新的Entry会插入链表头部,急需要简单改变引用链即可,而对于查找操作来讲,此时就需要遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。
initialCapacity默认为16,loadFactory默认为0.75,在常规构造器中,没有为数组table分配内存空间(有一个入参为指定Map的构造器例外),而是在执行put操作的时候才真正构建table数组。
请参考文献:
http://www.cnblogs.com/chengxiao/p/6059914.html
http://blog.csdn.net/jiary5201314/article/details/51439982
阅读全文
0 0
- HashMap的实现原理
- HashMap的实现原理
- hashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- HashMap的实现原理
- Hashmap 的实现原理
- javaScript学习笔记
- 【Lua学习笔记】Lua中协程的使用
- innerHTML基础知识
- hdu 6085
- 【编程语言学习】C++ Primer 对constexpr 和常量表达式的讲解
- HashMap的实现原理
- C 一一 static和extern关键字详解
- 使用python fit,predict出现的错误
- 读取excel文件信息实例2
- 并发基本概念介绍
- python基础——函数编程
- javascript随机数
- Surrounded_Regions
- 混合云起航