First stage: Array was replaced with ArrayList

This commit is contained in:
Сергей Полевой 2022-11-05 16:20:44 +04:00
parent 385eedd0b9
commit 8fc2d24e7e

View File

@ -1,12 +1,18 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Objects;
public class SetArtilleriesGeneric<T> { public class SetArtilleriesGeneric<T> {
private final Object[] _places; private final ArrayList<T> _places;
private final int _maxCount;
public int getCount() { public int getCount() {
return _places.length; return _places.size();
} }
public SetArtilleriesGeneric(int count) { public SetArtilleriesGeneric(int count) {
_places = new Object[count]; _maxCount = count;
_places = new ArrayList<>(count);
} }
public int insert(T artillery) { public int insert(T artillery) {
@ -14,57 +20,37 @@ public class SetArtilleriesGeneric<T> {
} }
public int insert(T artillery, int position) { public int insert(T artillery, int position) {
if (position < 0 || position >= getCount()) { if (position < 0 || position >= getCount() || getCount() == _maxCount) {
return -1; return -1;
} }
if (_places[position] == null) { _places.add(position, artillery);
_places[position] = artillery;
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] = artillery;
return position; return position;
} }
@SuppressWarnings("unchecked")
public T remove(int position) { public T remove(int position) {
if (position < 0 || position >= getCount()) if (position < 0 || position >= getCount())
{ {
return null; return null;
} }
var result = _places[position]; T result = _places.get(position);
_places[position] = null; _places.remove(position);
return (T) result; return result;
} }
@SuppressWarnings("unchecked")
public T get(int position) { public T get(int position) {
if (position < 0 || position >= getCount()) { if (position < 0 || position >= getCount()) {
return null; return null;
} }
return (T) _places[position]; return _places.get(position);
}
public Iterator<T> getArtilleries() {
return _places.stream().filter(Objects::nonNull).iterator();
} }
} }