import java.util.ArrayList; import java.util.Iterator; import java.util.Objects; public class SetArtilleriesGeneric { private final ArrayList _places; private final int _maxCount; public int getCount() { return _places.size(); } public SetArtilleriesGeneric(int count) { _maxCount = count; _places = new ArrayList<>(count); } public int insert(T artillery) { return insert(artillery, 0); } public int insert(T artillery, int position) { if (position < 0 || position >= getCount() || getCount() == _maxCount) { return -1; } _places.add(position, artillery); return position; } public T remove(int position) { if (position < 0 || position >= getCount()) { return null; } T result = _places.get(position); _places.remove(position); return result; } public T get(int position) { if (position < 0 || position >= getCount()) { return null; } return _places.get(position); } public Iterable getArtilleries() { return () -> _places.stream().filter(Objects::nonNull).iterator(); } }