jdk 1.7中 ArrayList的容量增长方式

来源:互联网 发布:京东通信网络不能用 编辑:程序博客网 时间:2024/06/05 05:16

在之前版本中newCapacity = oldCapacity + oldCapacity/2 +1;

jdk 1.7 中,做了一些改进,将除法操作改成了移位操作

    public void ensureCapacity(int minCapacity) {        if (minCapacity > 0)            ensureCapacityInternal(minCapacity);    }    private void ensureCapacityInternal(int minCapacity) {        modCount++;        // overflow-conscious code        if (minCapacity - elementData.length > 0)            grow(minCapacity);    }    private void grow(int minCapacity) {        // overflow-conscious code        int oldCapacity = elementData.length;        int newCapacity = oldCapacity + (oldCapacity >> 1);        if (newCapacity - minCapacity < 0)            newCapacity = minCapacity;        if (newCapacity - MAX_ARRAY_SIZE > 0)            newCapacity = hugeCapacity(minCapacity);        // minCapacity is usually close to size, so this is a win:        elementData = Arrays.copyOf(elementData, newCapacity);    }


0 0
原创粉丝点击