HashMap实现原理:容量、负载因子、hash与定位都搞定了吗?( 三 )

Tips:

默认的capacity为16 , loadFactor为0.75 , 但如果需要优化的话 , 要考量具体的使用场景 。

  • 如果对迭代性能要求高 , 不要把capacity设置过大 , 也不要把loadFactor设置过小 , 否则会导致bucket中的空位置过多 , 浪费性能

  • 如果对随机访问的性能要求很高的话 , 不要把loadFactor设置的过大 , 否则会导致访问时频繁碰撞 , 时间复杂度向O(n)退化

  • 如果数据增长很快的话 , 或数据规模可预知 , 可以在创建HashMap时主动设置capacity

hash与定位

作为API的设计者 , 不能假定用户实现了良好的hashCode方法 , 所以通常会对hashCode再计算一次hash:

static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);

推荐阅读