ArrayList 源码(1.8)

1 new ArrayList() 时,将内部DEFAULTCAPACITY_EMPTY_ELEMENTDATA赋值给 elmentData数组。 

2 add(E e)时,调用ensureCapacityInternal(size +1),此时size 为0,minCapacity为10,(DEFAULT_CAPACITY为10,取DEFAULT_CAPACITY和minCapacity之间最大值)。

modCount++;如果minCapacity > 当前elementData.length,调用grow(minCapacity) int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); 即 新容量是旧容量1.5倍, elementData = Arrays.copyOf(elementData, newCapacity);

elementData[size++] = e;

3 size() 直接返回size

4 contains(E e) 返回 indexOf(e )>=0

5 indexOf(E e) 先判断e是否为null,遍历elementData,返回第一个等于e(null)的index,没有返回-1

6 remove(int index) 先rangeCheck(index),如果index>size 抛IndexOutOfBoundsException

  modCount++;

  取到index对应元素,通过System.arraycopy将index后面的元素前移一位,将size前一个元素赋值为null,

  返回删除的对象

lastIndexOf(Object o) indexOf的倒序实现,从后向前比对。

8 clear()

        modCount++;

        // clear to let GC do its work

        for (int i = 0; i < size; i++)

            elementData[i] = null;

        size = 0;

   

猜你喜欢

转载自edgar108.iteye.com/blog/2282584