public class SetShipsGeneric { private final Object[] _places; public int getCount() { return _places.length; } public SetShipsGeneric(int count) { _places = new Object[count]; } public int insert(T ship) { return insert(ship, 0); } public int insert(T ship, int position) { if (position < 0 || position >= getCount()) { return -1; } if (_places[position] == null) { _places[position] = ship; return position; } int firstNull = -1; for (int i = position + 1; i < getCount(); i++) { if (_places[i] == null) { firstNull = i; break; } } if (firstNull == -1) { return -1; } System.arraycopy(_places, position, _places, position + 1, firstNull - position); _places[position] = ship; return position; } @SuppressWarnings("unchecked") public T remove(int position) { if (position < 0 || position >= getCount()) { return null; } var result = _places[position]; _places[position] = null; return (T) result; } @SuppressWarnings("unchecked") public T get(int position) { if (position < 0 || position >= getCount()) { return null; } return (T) _places[position]; } }