发表于: 2018-02-04 23:43:50
1 830
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
1.HashMap
(1)基于Map接口的实现,存储键值对时使用HashMap
特点:键值可以为空,非同步的,HashMap存储着Entry(hash,key,value,next)对象
(2)工作原理
通过hash的方法,通过put,get存储获取对象。
1⃣️存储对象的时候,将K/V传给put以后,调用hashCode计算出hash,然后再通过hash值得到bucket的位置,进一步存储。HashMap会更加bucket的占用情况自动调整容量。
*****超过Load factor是则resize为原来的2倍。
2⃣️获取对象的时候,我们将K传给get,调用hashCode计算出hash,然后再通过hash值得到bucket的位置,并进一步调用equals()方法确认键值对。
如果发生碰撞,HashMap将通过链表把产生碰撞的元素组织起来。
而在Java8以后,如果bucket中碰撞元素超过某个限制(八个),则使用红黑树替换链表,从而提高速度。
(3)get,put原理,以及hashCode,equals()的作用
通过key的hashCode进行hashing,并计算出下标(n-1 & hash),从而获得buckets的位置。
key.equals()就是在产生碰撞以后,去链表或树中查找相应的节点
(4)HashMap的实现
通过hashCode的高16位异或低16位实现的
(h = k.hashCode()) ^ (h >>> 16)
从速度、功效、质量考虑
(5)如果HashMap的大小超过负载因子定义的容量。怎么半?
超过了Load factor (0.75) * Capacity后,就resize一个原来长度2倍的HashMap,并调用hash方法。
明天计划的事情:(一定要写非常细致的内容)
继续看书
遇到的问题:(遇到什么困难,怎么解决的)
无
收获:(通过今天的学习,学到了什么知识)
无
评论