Android中SparseArrayCompat不断增长的政策背后的理由是什么?

时间:2015-09-23 04:22:19

标签: 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++)
        if (need <= (1 << i) - 12)
            return (1 << i) - 12;


    return need;
}

似乎选择最接近的2的幂大于或等于所需的容量。我没有得到的是在return语句中减去12。如果所需的容量在不久的将来增长,那么-12条件中的if项似乎是任意额外的空间,这是有意义的,但返回语句摆脱了额外的空间。如果没有减法,return语句不应该返回(1 << i)吗?

我很想知道是否有人可以帮我向我解释一下。我不禁感到背部发痒,却不理解为什么。

参考文献:

1 个答案:

答案 0 :(得分:2)

以下是an old comment

// 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类......