达到大小时,Java Collections会自动重新分配

AHu*_*ist 0 java collections list bitset dynamic-allocation

我不确定我是否使用了正确的术语,但我很好奇它是如何确定在Java充满时增加Java的大小的多少?我尝试过搜索,但我并没有真正想出任何有用的东西.

所以,如果我有类似的东西


List l = new ArrayList(1);
l.add("1");
l.add("2");
它如何确定增加列表大小的程度?它总是一个设定值,如果是这样,那个值是多少?如果它不同,我也会对BitSet的这些信息感兴趣.

谢谢,让我知道我是否应该澄清任何问题.

KAR*_*ván 7

它叫ensureCapacity:

/**
 * Increases the capacity of this <tt>ArrayList</tt> instance, if
 * necessary, to ensure that it can hold at least the number of elements
 * specified by the minimum capacity argument.
 *
 * @param   minCapacity   the desired minimum capacity
 */
public void ensureCapacity(int minCapacity) {
    modCount++;
    int oldCapacity = elementData.length;
    if (minCapacity > oldCapacity) {
        Object oldData[] = elementData;
        int newCapacity = (oldCapacity * 3) / 2 + 1;
        if (newCapacity < minCapacity)
            newCapacity = minCapacity;
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以看到newCapacity(oldCapacity * 3) / 2 + 1