public final @Nullable E first() {
    if (this == EMPTY) return null;
    E single = asElement();
    if (single != null) return single;
    List<E> list = asRandomAccess();
    if (list != null) {
      return list.isEmpty() ? null : list.get(0);
    }
    Iterator<E> iterator = iterator();
    return iterator.hasNext() ? iterator.next() : null;
  }
public final @Nullable E first()