@Override
  public @NotNull ListIterator<E> listIterator(final int index) {
    Object[] elements = get();
    int len = elements.length;
    if (index < 0 || index > len) {
      throw new IndexOutOfBoundsException("Index: " + index);
    }

    return elements.length == 0 ? Collections.emptyListIterator() : new COWIterator(elements, index);
  }
@Override
  public @NotNull ListIterator<E> listIterator(final int index)