Java Android中SparseArrayCompat不断增长的政策背后的基本原理是什么?

Java Android中SparseArrayCompat不断增长的政策背后的基本原理是什么?,java,android,arrays,android-support-library,sparse-matrix,Java,Android,Arrays,Android Support Library,Sparse Matrix,Android支持库中的SparseArrayCompat类是使用数组的映射的轻量级实现。与许多使用阵列的容器实现一样,它有一个不断增长的策略,以确保阵列容量足以容纳所有元素。在SparseArrayCompat实现中,不断增长的策略用ContainerHelpers.idealByteArraySize()表示,如下所示: public static int idealByteArraySize(int need) { for (int i = 4; i < 32; i++)

Android支持库中的
SparseArrayCompat
类是使用数组的映射的轻量级实现。与许多使用阵列的容器实现一样,它有一个不断增长的策略,以确保阵列容量足以容纳所有元素。在
SparseArrayCompat
实现中,不断增长的策略用
ContainerHelpers.idealByteArraySize()
表示,如下所示:

public static int idealByteArraySize(int need) {
    for (int i = 4; i < 32; i++)
        if (need <= (1 << i) - 12)
            return (1 << i) - 12;


    return need;
}
public static int-idealbytearreaysize(int-need){
对于(int i=4;i<32;i++)
如果(需要这里是关于它的:

// it looks like right now objects want to be powers of 2 minus 8
// and the array size eats another 4 bytes

也许它试图让整个容器对象完全适合2^n的分配?如果是这样,它似乎不适合
SparseArrayCompat
类,因为
mGarbage
成员…

很可能您不会得到一个直接的答案或此方法计算大小的一个明确原因就像它一样。像这样的事情大多是通过实验确定的——换句话说,就是测试什么最有效。在大多数其他
集合
实现中,以及在大多数线程池或类似的东西中,都可以找到同样哲理的算法或常量。