public class SetPlanesGeneric { //массив объектов, которые храним private final Object[] _places; //количество объектов в массиве public int Count() { return _places.length; } //конструктор public SetPlanesGeneric(int count) { _places = new Object[count]; } //добавление объекта в набор public int Insert(T plane) { return Insert(plane, 0); } //добавление объекта в набор на конкретную позицию public int Insert(T plane, int position) { //проверка на корректность значения индекса if (position >= _places.length || position < 0) { return -1; } //проверка ячейки на пустоту if (_places[position] == null) { _places[position] = plane; return position; } //поиск первой свободной ячейки int _emptyPositionIndex = -1; for (int i = position + 1; i < Count(); i++) { if (_places[i] == null) { _emptyPositionIndex = i; break; } } //есла пустых ячеек нет if (_emptyPositionIndex < 0) { return -1; } //сдвиг объектов for (int i = _emptyPositionIndex; i > position; i--) { _places[i] = _places[i - 1]; } _places[position] = plane; return position; } //удаление объекта из набора с конкретной позиции public T Remove(int position) { // проверка позиции if (position >= _places.length || position < 0) { return null; } // удаление объекта из массива, присовив элементу массива значение null T temp = (T)_places[position]; _places[position] = null; return temp; } //получение объекта из набора по позиции public T Get(int position) { if (position >= _places.length || position < 0) { return null; } else if (_places[position] == null) { return null; } return (T)_places[position]; } }