01. Коллекции
Коллекция - это объединение однотипных переменных. Размер коллекции может меняться. Переменные называются элементами.
Создадим класс коллекции MyCollection
- MyCollection.java
// класс коллекции
public class MyCollection {
// элементы коллекции
public int[] elems;
// положение последнего добавленного элемента
public int elemPos = -1;
// конструктор
public MyCollection() {
elems = new int[10];
}
// конструктор
public MyCollection(MyCollection myCollection) {
elems = myCollection.elems;
}
// добавление элемента в коллекцию
public boolean add(int v) {
// увеличиваем положение последнего добавленного элемента на 1
elemPos++;
// добавляем элемен в очередь
elems[elemPos] = v;
// возвращаем `true`
retruen true;
}
// получить элементы коллекции
public int [] getData(){
// копирование всего массива средствами java
return Arrays.copyOf(elems,10);
}
}
Теперь в главном классе Main
можно протестировать работу коллекции:
- Main.java
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// создаём коллекцию
MyCollection myCollection = new MyCollection();
myCollection.add(3);
myCollection.add(5);
// выводим встроенное строковое представление массива
// с элементами коллекции
System.out.println(Arrays.toString(myCollection.getData()));
myCollection.add(7);
myCollection.add(1);
myCollection.add(5);
// выводим встроенное строковое представление массива
// с элементами коллекции
System.out.println(Arrays.toString(myCollection.getData()));
}
}
На консоль будет выведено:
[3, 5, 0, 0, 0, 0, 0, 0, 0, 0]
[3, 5, 7, 1, 5, 0, 0, 0, 0, 0]
Задание
Трудоёмкость
Это задание рассчитано на два урока, за него будет выставлено две оценки
У такой коллекции много недостатков.
Допишите класс MyCollection
так,
чтобы он реализовывал следующую логику:
Использовать встроенные коллекции java запрещается
- Поменяйте первоначальный размер массива элементов на
int [] getData()
- возвращает копию массиваelems
, но копироваться должны только сохранённые элементы (доelemPos
)boolean add(int v)
должен добавлять новый элемент в коллекцию (в конец массива). Если массив уже полностью заполнен, то необходимо создать новый, в два раза больший, и скопировать в него все элементы исходного массива. После этого необходимо добавить новый элемент. При добавлении Метод должен увеличивать количество добавленных элементов коллекции на . Возвращаетtrue
. Заранее сделать большой массив нельзя.int size()
- возвращает количество сохранённых элементов.boolean isEmpty()
- возвращаетtrue
если в коллекции нет сохранённых элементов иfalse
, если есть.void clear()
- очистить коллекцию, обнуляетelemCnt
и заполняет массивelems
двумя нулевыми элементами.boolean removeFirst(int v)
- удаляет первый элемент, равный переданному в аргументах из коллекции, возвращаетtrue
, если хотя бы один такой элемент был иfalse
, если нетboolean contains(int v)
- возвращаетtrue
, если в коллекции есть хотя бы один элемент, равный переданному в аргументах иfalse
, если нет- Конструктор копии
MyCollection(MyCollection myCollection)
, который на основе коллекции, переданной в аргументе, инициализирует поля копиями полей полученной из аргументов коллекции boolean addAll(MyCollection myCollection)
- добавляет в коллекцию все элементы коллекции, переданной в аргументах по той же логике, что иboolean add(int v)
. Возвращаетtrue
boolean containsAll(MyCollection myCollection)
- возвращаетtrue
, если в коллекции присутствует каждый из элементов переданной в аргументах коллекции
Все поля и методы должны иметь модификатор public