美文网首页
SparseArray容量初始大小到底是多少?

SparseArray容量初始大小到底是多少?

作者: Richair_Ann | 来源:发表于2022-03-18 17:22 被阅读0次

    以Android4.3的源码分析SparseArray的容量初始值到底是多少

        //无参构造函数
        public SparseArray() {
           //这里无参构造函数调用有参构造函数
            this(10);
        }
    
    

    紧接着

     //有参构造函数
     public SparseArray(int initialCapacity) {
            //决定它初始容量的关键代码就是下边这行
            initialCapacity = ArrayUtils.idealIntArraySize(initialCapacity);
            mKeys = new int[initialCapacity];
            mValues = new Object[initialCapacity];
            mSize = 0;
        }
    

    紧接着看ArrayUtils.idealIntArraySize(initialCapacity);这里边到底做了什么

    public class ArrayUtils{
      private ArrayUtils() { /* cannot be instantiated */ }
        //我写的注释已经很明确,这个for循环只有当1左移6位=64时
        public static int idealByteArraySize(int need) {
            //need= 40
            for (int i = 4; i < 32; i++)
                //if(40<=(1<<6=64)-12)成立
                if (need <= (1 << i) - 12)
                    //1<<6=64-12=52 所以这里初始化的时候返回的值是52
                    return (1 << i) - 12;
            return need;
        }
    
        public static int idealBooleanArraySize(int need) {
            return idealByteArraySize(need);
        }
    
        public static int idealShortArraySize(int need) {
            return idealByteArraySize(need * 2) / 2;
        }
    
        public static int idealCharArraySize(int need) {
            return idealByteArraySize(need * 2) / 2;
        }
        //我们需要看的是这个方法,其他忽略
        public static int idealIntArraySize(int need) {
            //idealByteArraySize(10 * 4=40)=52/4=13写的已经够清楚了吧
            return idealByteArraySize(need * 4) / 4;
        }
    
        public static int idealFloatArraySize(int need) {
            return idealByteArraySize(need * 4) / 4;
        }
    
        public static int idealObjectArraySize(int need) {
            return idealByteArraySize(need * 4) / 4;
        }
    
        public static int idealLongArraySize(int need) {
            return idealByteArraySize(need * 8) / 8;
        }
    
    }
    

    所以得出结论SparseArray两个数组(初始容量大小是13,13,13),不是10,不是10,不是10,说三遍,不要让那些送资料的,骗关注的忽悠了,还是要自己看源码,自己去求证

    相关文章

      网友评论

          本文标题:SparseArray容量初始大小到底是多少?

          本文链接:https://www.haomeiwen.com/subject/yxtwdrtx.html