java基础笔记--阅读ArrayList源码发现

List是常用的一种数据集合,默认size值是10.如果增加的数据超过默认值,会扩大到原来数据长度的一半。原来是N,那么扩大后N+N/2

 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);
    }

采用>>进行除于2,实际上是二进制向右移动一位。相当高明。

ArrayList长度是有限制的,最长是:Integer.MAX_VALUE - 8=2147483639(2亿多的量,一般用到这量内存溢出也是很正常的事)(int 是4个字节,一个字节为8位)

学习的时间不一定要特定安排
原文地址:https://www.cnblogs.com/zhongzheng123/p/7992652.html