code: public ListIterator<E> listIterator(int index) {
          Object[] snapshot = elements;
          if (index < 0 || index > snapshot.length) {
              throw new IndexOutOfBoundsException("index=" + index + ", length=" + snapshot.length);
          }
          CowIterator<E> result = new CowIterator<E>(snapshot, 0, snapshot.length);
          result.index = index;
          return result;
      }
docs: Returns a {@link ListIterator} that iterates over the elements of this
  list as they were at the time of this method call. Changes to the list
  made after this method call will not be reflected by the iterator, nor
  will they trigger a {@link ConcurrentModificationException}.
  
  <p>The returned iterator does not support {@link ListIterator#add},
  {@link ListIterator#set} or {@link Iterator#remove()},