zoukankan      html  css  js  c++  java
  • HashMap初始容量的设置方法

    一般如果new HashMap() 不传值,默认大小是16,负载因子是0.75, 如果自己传入初始大小k,初始化大小为 大于等于k的 ,最接近k的2的整数次方,例如如果传10,大小为16。

    实现代码如下:

    static final int tableSizeFor(int cap) {
      int n = cap - 1;
      n |= n >>> 1;
      n |= n >>> 2;
      n |= n >>> 4;
      n |= n >>> 8;
      n |= n >>> 16;
      return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
    }
    
    

    注释:MAXIMUM_CAPACITY为HashMap最大容量:1 << 30

    下面来分析上述代码为什么能够实现返回大于等于cap的且最接近cap的2的整数次方,分为以下两种情况进行讨论:

    1. cap值原本就为2的整数次方,那应当返回原值,我们以32为例:

    2.cap值不是2的整数次方,应当大于cap且距离cap最近的2的整数次方,我们以50为例:

  • 相关阅读:
    触摸事件传递与响应者链条
    运动事件Motion Events
    手势识别
    MVC模式
    单例模式
    观察者模式(一对多)
    关于多线程的介绍
    Sandbox简介和路径获取
    NSFileManager和NSFileHandle使用
    归档储存
  • 原文地址:https://www.cnblogs.com/CoderHao/p/14623990.html
Copyright © 2011-2022 走看看