@Override
  public @NotNull Iterator<E> iterator() {
    Object[] elements = get();
    return elements.length == 0 ? Collections.emptyIterator() : new COWIterator(elements, 0);
  }
@Override
  public @NotNull Iterator<E> iterator()