上文我们讲了HashMap那骚骚的逻辑结构,这一篇我们来吹吹它的实现思想,也就是算法层面。有兴趣看下或者回顾上一篇HashMap逻辑层面的,可以看下HashMap源码解析(一)。
使用了哈希表得“拉链法”.
我打算按这个顺序来讲HashMap:几个关键属性 -> 构造方法-> 存取元素方法 ->解决hash冲突方法->HashMap扩容问题。
4个关键属性:
/** *HashMap的存储大小 */ transient int size; /** * HashMap的大小临界值,如果达到这个值就需要重新分配大小 */ int threshold; /** * 负载因子(默认值一般是0.75),哈希表在其容量自动增加之前可以达到多满的一种尺度。 *当哈希表中的条目数超出了 负载因子与当前容量的乘积时, *则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。 *负载因子过高虽然减少了空间开销,但同时也增加了查询成本 * static final float DEFAULT_LOAD_FACTOR = 0.75f; * @serial */ final float loadFactor; /** * HashMap修改总数(修改数+删除数) */ transient int modCount;