package collection; public abstract class AbstractList<E> implements List<E> { protected static final String PREFIX = "["; protected static final String SUFFIX = "]"; protected static final String SEPERATOR = ", "; protected static final int MAX_SIZE = Integer.MAX_VALUE / 3; protected void checkIndex(int i) { if (i < 0 || i > Math.min(size(), MAX_SIZE)) throw new IndexOutOfBoundsException("Size :" + size() + ", Index: " + i); } @Override public boolean isEmpty() { return size() == 0; } @Override public int indexOf(E e) { for (int i = 0; i < size() - 1; i++) { if (get(i).equals(e)) return i; } return -1; } protected abstract Iterator<E> iterator(); @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(PREFIX); for (int i = 0; i < size(); i++) { sb.append(get(i)); if (i < size() - 1) sb.append(SEPERATOR); } sb.append(SUFFIX); return sb.toString(); } }