Skip to main content

01. Коллекции

Коллекция - это объединение однотипных переменных. Размер коллекции может меняться. Переменные называются элементами.

Создадим класс коллекции MyCollection

// класс коллекции
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 можно протестировать работу коллекции:

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 запрещается

  1. Поменяйте первоначальный размер массива элементов на 22
  2. int [] getData() - возвращает копию массива elems, но копироваться должны только сохранённые элементы (до elemPos)
  3. boolean add(int v) должен добавлять новый элемент в коллекцию (в конец массива). Если массив уже полностью заполнен, то необходимо создать новый, в два раза больший, и скопировать в него все элементы исходного массива. После этого необходимо добавить новый элемент. При добавлении Метод должен увеличивать количество добавленных элементов коллекции на 11. Возвращает true. Заранее сделать большой массив нельзя.
  4. int size() - возвращает количество сохранённых элементов.
  5. boolean isEmpty() - возвращает true если в коллекции нет сохранённых элементов и false, если есть.
  6. void clear() - очистить коллекцию, обнуляет elemCnt и заполняет массив elems двумя нулевыми элементами.
  7. boolean removeFirst(int v) - удаляет первый элемент, равный переданному в аргументах из коллекции, возвращает true, если хотя бы один такой элемент был и false, если нет
  8. boolean contains(int v) - возвращает true, если в коллекции есть хотя бы один элемент, равный переданному в аргументах и false, если нет
  9. Конструктор копии MyCollection(MyCollection myCollection), который на основе коллекции, переданной в аргументе, инициализирует поля копиями полей полученной из аргументов коллекции
  10. boolean addAll(MyCollection myCollection) - добавляет в коллекцию все элементы коллекции, переданной в аргументах по той же логике, что и boolean add(int v). Возвращает true
  11. boolean containsAll(MyCollection myCollection) - возвращает true, если в коллекции присутствует каждый из элементов переданной в аргументах коллекции

Все поля и методы должны иметь модификатор public

Ссылка на контест