code: protected void removeRange(int fromIndex, int toIndex) {
          // Android-changed: Throw an IOOBE if toIndex < fromIndex as documented.
          // All the other cases (negative indices, or indices greater than the size
          // will be thrown by System#arrayCopy.
          if (toIndex < fromIndex) {
              throw new IndexOutOfBoundsException("toIndex < fromIndex");
          }
  
          modCount++;
          int numMoved = size - toIndex;
          System.arraycopy(elementData, toIndex, elementData, fromIndex,
                           numMoved);
  
          // clear to let GC do its work
          int newSize = size - (toIndex-fromIndex);
          for (int i = newSize; i < size; i++) {
              elementData[i] = null;
          }
          size = newSize;
      }
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.)
  
  @throws IndexOutOfBoundsException if {@code fromIndex} or
  {@code toIndex} is out of range
  ({@code fromIndex < 0 ||
  fromIndex >= size() ||
  toIndex > size() ||
  toIndex < fromIndex})