一、 构造器:算法
a)得到默认数组大小:1>>4 :16数组
b) 得到负载因子:0.75:衡量hashmap的空间使用程度安全
i.过大:使用空间更加充分,可是查找效率变低,即时间复杂度变大 ii.太小:hashmap数据过于稀疏,形成空间浪费,即空间复杂度变大
c)建立数组并发
二、 Put()方法:使用key的hash算法,计算出可key的存储的数组位置,肯定key的位置后相应的value也会肯定,若是数组位置已经有数值存在,则以第一个值为链头以链表形式存储。jvm
三、 Get()方法:计算出key的hashcode值,而后去寻找高并发
四、 Resize()方法:若是须要的存放的存储空间大于默认数组大小*负载因子的乘积,那么就发生扩容,扩大为原来的两倍线程
五、 问题:指针
a)为何hashmap的容量老是2的次方code
i.由于hashmap中有一个方法是h&table.length-1,这样能够减小碰撞几率。 ii.例子: 8&14 9&14 与 8&15 9&15 15不会发生碰撞 14会发生碰撞,这是一会我数学几率问题。
b) 能够的话建议使用hashmap的clear方法循环使用hashmap内存
i.应为hashmap是强引用类型,原有不适使用的hashmap不会被jvm回收,可能形成内存泄露
一、 状况(1.7):内部链表遭到破坏,发生链表成环,形成死循环,cpu飙升
二、 解决:1.8 引入两个指针声明 确保顺序
一、 方法
a)使用collections.synchronizedmap方法
b) 使用concurrenthashmap并发集合类代替