
- •Классы-коллекции
- •Интерфейсы-коллекции
- •Интерфейс Collection
- •Интерфейс List
- •Интерфейс Set
- •Интерфейс Queue
- •Класс ArrayList
- •Паттерн проектирования Iterator
- •Класс LinkedList
- •Классы-множества
- •Интерфейс SortedSet и интерфейс Comparator
- •Понятие ассоциативного массива
- •Интерфейс Map
- •Класс Hashmap
- •Класс LinkedHashMap
- •Класс TreeMap
- •Класс WeakHashMap
- •Интерфейс SortedMap
- •Пример работы с ассоциативными массивами
- •Классы-оболочки
- •Работа с датой и временем
- •Генерация случайных чисел
- •Ход работы:
- •Задание 1
- •Задание 2
- •Задание №3
- •Контрольные вопросы:
Интерфейс List
Интерфейс List описывает упорядоченный список. Элементы списка пронумерованы, начиная с нуля и к конкретному элементу можно обратиться по целочисленному индексу. Интерфейс List является наследником интерфейса Collection, поэтому содержит все его методы и добавляет к ним несколько своих:
add(int index, Object item) – вставляет элемент item в позицию index, при этом список раздвигается (все элементы, начиная с позиции index, увеличивают свой индекс на 1);
get(int index) – возвращает объект, находящийся в позиции index;
indexOf(Object obj) – возвращает индекс первого появления элемента obj в списке;
lastIndexOf(Object obj) – возвращает индекс последнего появления элемента obj в списке;
add(int index, Object item) – заменяет элемент, находящийся в позиции index объектом item;
subList(int from, int to) – возвращает новый список, представляющий собой часть данного (начиная с позиции from до позиции to-1 включительно).
На рисунке 2 красным выделены интерфейсы, зеленым – абстрактные классы, а синим готовые реализации.
Между интерфейсом и конкретной реализацией коллекции существует несколько абстрактных классов. Это сделано для того, что бы вынести общий функционал в абстрактный класс, таким образом реализовать повторное использование кода.
Рисунок 2
Интерфейс Set
Интерфейс Set описывает множество (Рисунок 3). Элементы множества не упорядочены, множество не может содержать двух одинаковых элементов. Интерфейс Set унаследован от интерфейса Collection, но никаких новых методов не добавляет. Изменяется только смысл метода add(Object item) – он не станет добавлять объект item, если он уже присутствует во множестве.
Рисунок 3
Интерфейс Queue
Интерфейс Queue описывает очередь (рисунок 4). Элементы могут добавляться в очередь только с одного конца, а извлекаться с другого (аналогично очереди в магазине). Интерфейс Queue так же унаследован от интерфейса Collection. Специфические для очереди методы:
poll() – возвращает первый элемент и удаляет его из очереди.
peek() – возвращает первый элемент очереди, не удаляя его.
offer(Object obj) – добавляет в конец очереди новый элемент и возвращает true, если вставка удалась.
Методы element() и remove() работают аналогично методам poll() и peek(), но если очередь пуста, возбуждают исключение.
PriorityQueue - единственная прямая реализация интерфейса Queue (не считая LinkedList, который больше является списком, чем очередью).
Эта очередь упорядочивает элементы либо по их натуральному порядку (используя интерфейс Comparable), либо с помощью интерфейса Comparator, полученному в конструкторе.
Рисунок 4
Класс ArrayList
ArrayList – один из самых часто используемых коллекций. ArrayList инкапсулирует в себе обычный массив, длина которого автоматически увеличивается при добавлении новых элементов.
Так как ArrayList использует массив, то время доступа к элементу по индексу минимально (В отличие от LinkedList). При удалении произвольного элемента из списка, все элементы находящиеся «правее» смещаются на одну ячейку влево, при этом реальный размер массива (его емкость, capacity) не изменяется. Если при добавлении элемента, оказывается, что массив полностью заполнен, будет создан новый массив размером (n * 3)/2 + 1, в него будут помещены все элементы из старого массива + новый, добавляемый элемент.