@NotNull @SuppressWarnings("unchecked") public static <E> BuilderFactory<E, IndexedList<E>> factory() { return (BuilderFactory) ArrayList.<E>factory(); }
@NotNull @Override public ArrayList<E> drop(int number) { number = Math.max(number, 0); if (number >= elements.length) return empty(); int len = elements.length - number; Object[] newElements = new Object[len]; System.arraycopy(elements, number, newElements, 0, len); return new ArrayList<E>(newElements); }
@NotNull @Override public ArrayList<E> range(int from, boolean fromInclusive, int to, boolean toInclusive) { if (isEmpty()) return this; from = fromInclusive ? from : from + 1; from = Math.max(from, 0); from = Math.min(from, elements.length - 1); to = toInclusive ? to : to - 1; to = Math.max(to, 0); to = Math.min(to, elements.length - 1); // From and to are now an inclusive range within bounds if (to < from) return empty(); int len = to - from + 1; Object[] newElements = Arrays.copyOf(elements, len); System.arraycopy(elements, from, newElements, 0, len); return new ArrayList<E>(newElements); }
@NotNull @Override public ArrayList<E> prepend(E elem) { int len = elements.length; Object[] newElements = new Object[len + 1]; System.arraycopy(elements, 0, newElements, 1, len); newElements[0] = elem; return new ArrayList<E>(newElements); }
@NotNull @Override public ArrayList<E> range(int from, boolean fromInclusive, int to, boolean toInclusive) { if (isEmpty()) return this; from = fromInclusive ? from : from + 1; from = Math.max(from, 0); from = Math.min(from, elements.length - 1); to = toInclusive ? to : to - 1; to = Math.max(to, 0); to = Math.min(to, elements.length - 1); // From and to are now an inclusive range within bounds if (to < from) return empty(); int len = to - from + 1; Object[] newElements = Arrays.copyOf(elements, len); System.arraycopy(elements, from, newElements, 0, len); return new ArrayList<E>(newElements); }
@NotNull @Override public ArrayList<E> drop(int number) { number = Math.max(number, 0); if (number >= elements.length) return empty(); int len = elements.length - number; Object[] newElements = new Object[len]; System.arraycopy(elements, number, newElements, 0, len); return new ArrayList<E>(newElements); }
@NotNull @Override public ArrayList<E> append(E elem) { int len = elements.length; Object[] newElements = Arrays.copyOf(elements, len + 1); newElements[len] = elem; return new ArrayList<E>(newElements); }
@NotNull @Override public ArrayList<E> range(int from, boolean fromInclusive, int to, boolean toInclusive) { if (isEmpty()) return this; from = fromInclusive ? from : from + 1; from = Math.max(from, 0); from = Math.min(from, elements.length - 1); to = toInclusive ? to : to - 1; to = Math.max(to, 0); to = Math.min(to, elements.length - 1); // From and to are now an inclusive range within bounds if (to < from) return empty(); int len = to - from + 1; Object[] newElements = Arrays.copyOf(elements, len); System.arraycopy(elements, from, newElements, 0, len); return new ArrayList<E>(newElements); }
@NotNull @Override public ArrayList<E> drop(int number) { number = Math.max(number, 0); if (number >= elements.length) return empty(); int len = elements.length - number; Object[] newElements = new Object[len]; System.arraycopy(elements, number, newElements, 0, len); return new ArrayList<E>(newElements); }
@NotNull @Override public ArrayList<E> prepend(E elem) { int len = elements.length; Object[] newElements = new Object[len + 1]; System.arraycopy(elements, 0, newElements, 1, len); newElements[0] = elem; return new ArrayList<E>(newElements); }
@NotNull @SuppressWarnings("unchecked") public static <E> BuilderFactory<E, IndexedList<E>> factory() { return (BuilderFactory) ArrayList.<E>factory(); }
@NotNull public static <E> IndexedList<E> copyOf(E[] es) { Object[] copy = new Object[es.length]; System.arraycopy(es, 0, copy, 0, es.length); return new ArrayList<E>(copy); }
@NotNull public static <E> IndexedList<E> copyOf(Iterator<E> iterator) { Builder<E, ArrayList<E>> builder = ArrayList.<E>factory().newBuilder(); while (iterator.hasNext()) { builder.add(iterator.next()); } return builder.build(); }
@NotNull @Override public ArrayList<E> set(int i, E elem) { Object old = elements[i]; if (old == elem) return this; int len = elements.length; Object[] newElements = Arrays.copyOf(elements, len); newElements[i] = elem; return new ArrayList<E>(newElements); }
@NotNull public static <E> IndexedList<E> copyOf(Iterator<E> iterator) { Builder<E, ArrayList<E>> builder = ArrayList.<E>factory().newBuilder(); while (iterator.hasNext()) { builder.add(iterator.next()); } return builder.build(); }