code: public E remove(int index) {
          if (index >= size)
              throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
  
          modCount++;
          E oldValue = (E) elementData[index];
  
          int numMoved = size - index - 1;
          if (numMoved > 0)
              System.arraycopy(elementData, index+1, elementData, index,
                               numMoved);
          elementData[--size] = null; // clear to let GC do its work
  
          return oldValue;
      }
docs: Removes the element at the specified position in this list.
  Shifts any subsequent elements to the left (subtracts one from their
  indices).
  
  @param index the index of the element to be removed
  @return the element that was removed from the list
  @throws IndexOutOfBoundsException {@inheritDoc}