构造函数 ArrayList 的构造函数有三个:
ArrayList()ArrayList(int)ArrayList(Collection<? extends E>) 
其中用的最多的是无参默认构造函数,ArrayList 底层是使用数组实现的,这里初始化一个空数组
1 2 3 4 5 public  ArrayList ()  {                                         this .elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }  private  static  final  Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
如果传入指定的容量(initialCapacity),则会初始化指定大小的数组
add 操作 调用 add(value) 会在列表的尾部添加一个元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 public  boolean  add (E e)  {                                                      ensureCapacityInternal(size + 1 );       elementData[size++] = e;                                                    return  true ;                                                            } private  void  ensureCapacityInternal (int  minCapacity)  {                      ensureExplicitCapacity(calculateCapacity(elementData, minCapacity)); } private  static  int  calculateCapacity (Object[] elementData, int  minCapacity)  {    if  (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {                  return  Math.max(DEFAULT_CAPACITY, minCapacity);                            }                                                                              return  minCapacity;                                                        } private  void  ensureExplicitCapacity (int  minCapacity)  {     modCount++;                                                                                                          if  (minCapacity - elementData.length > 0 )          grow(minCapacity);                              } private  static  final  int  MAX_ARRAY_SIZE  =  Integer.MAX_VALUE - 8 ;private  void  grow (int  minCapacity)  {                                    int  oldCapacity  =  elementData.length;          int  newCapacity  =  oldCapacity + (oldCapacity >> 1 );             if  (newCapacity - minCapacity < 0 )                                  newCapacity = minCapacity;          if  (newCapacity - MAX_ARRAY_SIZE > 0 )           newCapacity = hugeCapacity(minCapacity);                         elementData = Arrays.copyOf(elementData, newCapacity);      } private  static  int  hugeCapacity (int  minCapacity)  {     if  (minCapacity < 0 )          throw  new  OutOfMemoryError ();                   return  (minCapacity > MAX_ARRAY_SIZE) ?                 Integer.MAX_VALUE :                                 MAX_ARRAY_SIZE;                             }                                                   
允许添加 null
 
remove 操作 调用 remove(int) 删除指定下标的元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public  E remove (int  index)  {         rangeCheck(index);                                                                                                                                  modCount++;                                                               E  oldValue  =  elementData(index);                                                    int  numMoved  =  size - index - 1 ;                                          if  (numMoved > 0 )                  System.arraycopy(elementData, index+1 , elementData, index,                                 numMoved);                                           elementData[--size] = null ;                                                                                return  oldValue;                                                      }                                                                         
调用 remove(object) 删除指定元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 public  boolean  remove (Object o)  {                          if  (o == null ) {                  for  (int  index  =  0 ; index < size; index++)                  if  (elementData[index] == null ) {                           fastRemove(index);                                      return  true ;                                        }                                               } else  {                                                    for  (int  index  =  0 ; index < size; index++)                          if  (o.equals(elementData[index])) {                         fastRemove(index);                                      return  true ;                                        }                                               }                                                       return  false ;                                       }  private  void  fastRemove (int  index)  {                                           modCount++;                                                                 int  numMoved  =  size - index - 1 ;                                            if  (numMoved > 0 )                                                               System.arraycopy(elementData, index+1 , elementData, index,                                   numMoved);                                             elementData[--size] = null ;  }