初识ArrayList底层

222 阅读1分钟

ArrayList 底层的实现

  • 底层:数组(jdk1.8)实现。
  • ArrayList底层的几个基本属性。

array1.png

  • 1.在开始调用空构造器时,底层数组为空{}

array2.png

  • 2.向数组中添加元素时,调用add方法,底层数组被重新赋值。重新赋值后数组的大小为10。

array3.png

array4.png

array5.png

array6.png

array7.png

array8.png

  • 当数组的长度超过10后,就会进行扩容,扩容后数组的长度为15。(扩容为原来数组长度的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1);)

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

    }

ArrayList jdk1.8源码小结。

  * 开始时数组的大小为0,当添加元素时,进行add方法时,会初始化一个大小为10的数组。
  * 和jdk1.7相比没有一开始就初始化一个容量为10的数组,节省了内存。