code: public synchronized boolean addAll(int index, Collection<? extends E> c) {
          modCount++;
          if (index < 0 || index > elementCount)
              throw new ArrayIndexOutOfBoundsException(index);
  
          Object[] a = c.toArray();
          int numNew = a.length;
          ensureCapacityHelper(elementCount + numNew);
  
          int numMoved = elementCount - index;
          if (numMoved > 0)
              System.arraycopy(elementData, index, elementData, index + numNew,
                               numMoved);
  
          System.arraycopy(a, 0, elementData, index, numNew);
          elementCount += numNew;
          return numNew != 0;
      }
docs: Inserts all of the elements in the specified Collection into this
  Vector 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 Vector
  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 elements to be inserted into this Vector
  @return {@code true} if this Vector changed as a result of the call
  @throws ArrayIndexOutOfBoundsException if the index is out of range
  ({@code index < 0 || index > size()})
  @throws NullPointerException if the specified collection is null
  @since 1.2