关于hashMap的一些问答

1、HashMap是如何取数据的?

先调用key的hashCode方法获取hashCode接着对hashCode进行再散列(右移16位和自身相与),接着用再散列得到的值模上hashMap数组的大小,得到对应的数组索引,根据索引,在该索引位置通过遍历比较的方式得到value,如果遍历结束都没有找到相等的key则返回null。

2、loadFactor负载因子的意义是什么?

摘自他人:加载因子是表示Hsah表中元素的填满的程度.若:加载因子越大,填满的元素越多,好处是,空间利用率高了,但:冲突的机会加大了.反之,加载因子越小,填满的元素越少,
好处是:冲突的机会减小了,但:空间浪费多了.冲突的机会越大,则查找的成本越高.反之,查找的成本越小.因而,查找时间就越小.
因此,必须在 "冲突的机会"与"空间利用率"之间寻找一种平衡与折衷. 这种平衡与折衷本质上是数据结构中有名的"时-空"矛盾的平衡与折衷.

3.为什么HashMap表格容量大小是2的倍数?

一是为了扩容的时候,容易扩容,利用扩容后的大小也是2的倍数,将已经产生hash碰撞的元素完美的转移到新的table中去。
二是为了取模的时候,通过与运算进行加速。

4、你还知道哪些方法可以减少hash冲突?

md5,再散列法

おすすめ

転載: juejin.im/post/7076475960756797454