标签:
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,要插入的那条链表是否已有键值对。
将新建节点插入链表头部。插入头部可以避免尾部遍历所带来的时间损耗。
标签:
原文地址:http://www.cnblogs.com/kuihuazi/p/5350100.html