code: protected synchronized void removeRange(int fromIndex, int toIndex) {
          modCount++;
          int numMoved = elementCount - toIndex;
          System.arraycopy(elementData, toIndex, elementData, fromIndex,
                           numMoved);
  
          // Let gc do its work
          int newElementCount = elementCount - (toIndex-fromIndex);
          while (elementCount != newElementCount)
              elementData[--elementCount] = null;
      }
docs: Removes from this list all of the elements whose index is between
  {@code fromIndex}, inclusive, and {@code toIndex}, exclusive.
  Shifts any succeeding elements to the left (reduces their index).
  This call shortens the list by {@code (toIndex - fromIndex)} elements.
  (If {@code toIndex==fromIndex}, this operation has no effect.)