- •Лабораторная 8. Динамические структуры. Коллекции списки в c# и Java
- •Добавление элемента;
- •Динамические структуры данных
- •Списки, их виды Односвязный список
- •Двусвязный список
- •Классы c# для описания указанных типов данных Класс List и его методы
- •Класс LinkedList и его методы
- •Класс LinkedListNode представляет узел в LinkedList. Его свойства:
- •Классы-коллекции
- •Классы-коллекции в Java
- •Абстрактные классы
- •Понятие интерфейса в Java. Описание интерфейса
- •Реализация интерфейса
- •Интерфейсы-коллекции
- •Интерфейс Collection
- •Интерфейс List
- •Классы коллекций
- •Класс LinkedList
- •Лямбда - выражения в Java
- •В лямбда – выражение передаются не только данные, но и поведение
Интерфейсы-коллекции
Некоторые коллекции в пакете java.utils не представлены самостоятельными классами. Например, очередь и список. Но для этих полезных структур данных определены соответствующие интерфейсы, то есть можно пользоваться любым классом, реализующим такой интерфейс.
Интерфейс может использоваться в качестве типа данных так же, как и класс. Разница лишь в том, что объекты интерфейсного типа нельзя создать напрямую — необходимо выбрать класс, поддерживающий этот интерфейс и вызвать его конструктор.
Пусть, к примеру, нужен список, одна из наиболее удобных и часто употребляемых структур данных. Список — это упорядоченная последовательность элементов, каждый из которых можно получить по его позиции. Кроме того можно добавлять элементы в требуемые позиции списка и удалять их, при этом (и это главное удобство в отличие от массива) остальные элементы автоматически «раздвигаются» или «сдвигаются» так, что непрерывная связность списка сохраняется.
Список представлен в пакете java.util интерфейсом List. Вы можете создавать переменные этого типа и объявлять функции с таким параметром. Например, класс Game в программе игры в шашки (рис.)
имеет поле checkers типа List, хранящее все черные и белые шашки (объекты типа Checker). Когда шашку съедают, ее надо просто удалить из списка с помощью одного из удобных методов, определенных в интерфейсе List:
checkers.remove(check);
// удаляем из списка checkers съеденную шашку check.
Когда программе понадобится узнать обо всех оставшихся шашках (например, чтобы нарисовать их на экране), метод getCheckers() класса Game передаст ей список:
List ch = currentGame.getCheckers();
// здесь currentGame — объект класса Game
Теперь программа может работать с переменной ch как со списком (например, по очереди получить все его объекты).
В момент создания новой игры (т.е. в конструкторе класса Game) надо, очевидно, создать 24 шашки, расположенные на стандартных позициях и добавить их в список checkers. Но список тоже необходимо создать, однако нельзя воспользоваться конструкцией
checkers = new List();
поскольку List не является классом и не имеет конструктора. Нам нужно выбрать любой класс, реализующий интерфейс List и создать объект этого класса. Например, класс Vector
checkers = new Vector();
или класс ArrayList:
checkers = new ArrayList();
Независимо от того, какой именно класс будет выбран, поле checkers будет иметь тип List и на дальнейшую работу с ним выбор не повлияет. Можно добавлять шашки в список, удалять их из него, возвращать хранящиеся в списке шашки и т.д. посредством методов интерфейса List.
Интерфейс Collection
Интерфейс Collection содержит набор общих методов, которые используются в большинстве коллекций.
add(Object item) — добавляет в коллекцию новый элемент. Метод возвращает true, если добавление прошло удачно и false — если нет. Если элементы коллекции каким-то образом упорядочены, новый элемент добавляется в конец коллекции.
clear() — удаляет все элементы коллекции.
contains(Object obj) — возвращает true, если объект obj содержится в коллекции и false, если нет.
isEmpty() — проверяет, пуста ли коллекция.
remove(Object obj) — удаляет из коллекции элемент obj. Возвращает false, если такого элемента в коллекции не нашлось.
size() — возвращает количество элементов коллекции.
