HashMap详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashMap详解相关的知识,希望对你有一定的参考价值。

2016-04-03   16:38:17

转载请注明出处:http://www.cnblogs.com/kuihuazi/p/5350100.html

总述:下面讲解分为两个部分:hashmap的构建,HashMap的使用。

1.HashMap的构建

  如何构建HashMap?构建HashMap的过程中都做了什么?

  构造方法:HashMap(),HashMap(capacity),HashMap(capacity,loadFactor).前两个构造方法会转为对第三个构造方法的调用,capacity是容量,也就是数组的长度,loadFactor是装载因子,capacity*loadFactor的值是触发HashMap()进行扩容的最低键值对个数。

技术分享

  构造方法--- HashMap(capacity,loadFactor)都做了些什么那???见下面。

技术分享

  HashMap(capacity,loadFactor)只做了两件事:确定threshold,构建HashMap的存储结构---链表数组。

 

2. HashMap的使用:get(key),put(key,value).

1).get(key).

技术分享

HashMap会将key=null的键值对存入第一条链表也就是索引为0的链表中。

技术分享

技术分享

取余数的巧妙之处:

因为HashMap的容量是2的幂数,所以hash(key)%capacity=hash(key) & (capacity - 1):

技术分享

通过位移和异或来计算hash值。

技术分享

 

2).put(key,value)

  put(key,value)操作,当HashMap中已经存在键值=key的键值对,则用新value覆盖旧value,并返回旧值。若不存在,则将(key,value)插入链表的头部。

技术分享

当key=null时:

技术分享

添加(key,value)之前,要判断是否会触发扩容,扩容条件:当前HashMap中的键值对个数size是否已达到最低值threshold,要插入的那条链表是否已有键值对。技术分享

将新建节点插入链表头部。插入头部可以避免尾部遍历所带来的时间损耗。

技术分享

 

以上是关于HashMap详解的主要内容,如果未能解决你的问题,请参考以下文章

Java中HashMap详解

Java中HashMap详解

HashMap结构详解

HashMap详解

HashMap原理详解

java中HashMap详解