code: public boolean addAll(int index, Collection<? extends E> c) {
      if (index > size || index < 0)
        throw new IndexOutOfBoundsException(
            "Index: " + index + ", Size: " + size);
  
      Object[] a = c.toArray();
      int numNew = a.length;
      ensureCapacity(size + numNew);  // Increments modCount
  
      int numMoved = size - index;
      if (numMoved > 0)
        System.arraycopy(data, index, data, index + numNew,
            numMoved);
  
      System.arraycopy(a, 0, data, index, numNew);
      size += numNew;
      return numNew != 0;
    }
docs: Inserts all of the elements in the specified collection into this
  list, starting at the specified position.  Shifts the element
  currently at that position (if any) and any subsequent elements to
  the right (increases their indices).  The new elements will appear
  in the list in the order that they are returned by the
  specified collection's iterator.
  
  @param index index at which to insert the first element from the
  specified collection
  @param c     collection containing elements to be added to this list
  @return <tt>true</tt> if this list changed as a result of the call
  @throws IndexOutOfBoundsException {@inheritDoc}
  @throws NullPointerException      if the specified collection is null