Учебная страница курса биоинформатики,
год поступления 2010
Коллекции: Vector, Set, Map, Hash, Iterator, Collections, Arrays
Зачастую в программе работа идет не с одним объектом, а с целой группой более или менее однотипных экземпляров (например, автопарк организации). Проще всего сделать это с помощью массивов. Однако, несмотря на то, что это достаточно эффективное решение для многих случаев, оно имеет некоторые ограничения. Так, обращаться к элементу массива можно только по его номеру (индексу). Также необходимо заранее задать длину массива и больше ее не менять. Существует несколько различных типов классов-коллекций. Все они разрабатывались, по возможности, в соответствии с единой логикой и определенными интерфейсами и там, где это возможно, работа с ними унифицирована. Однако все коллекции отличаются внутренними механизмами хранения, временем доступа и манипуляции элементами, потребляемой памятью и другими деталями. Классы, обеспечивающие манипулирование коллекциями объектов, объявлены в пакете java.util.
Интерфейсы
Интерфейс Collection
Данный интерфейс является корнем всей иерархии классов-коллекций. Он определяет базовую функциональность любой коллекции – набор методов, которые позволяют добавлять, удалять, выбирать элементы коллекции. Классы, которые реализуют интерфейс Collection, могут содержать дубликаты и пустые (null) значения.
Интерфейс Set
Классы, которые реализуют этот интерфейс, не допускают наличия дубликатов! В коллекции этого типа разрешено наличие только одной ссылки типа null. Интерфейс Set расширяет интерфейс Collection, таким образом, любой класс, имплементирующий Set, реализует все методы, определенные в Collection. Любой объект, добавляемый в Set, должен реализовать метод equals, чтобы его можно было сравнить с другими.
Интерфейс List
Классы, реализующие этот интерфейс, содержат упорядоченную последовательность объектов (объекты хранятся в том порядке, в котором они были добавлены. Интерфейс List расширяет интерфейс Collection, и любой класс, имплементирующий List, реализует все методы, определенные в Collection, и в то же время вводятся новые методы, которые позволяют добавлять и удалять элементы из списка. List также обеспечивает ListIterator, который позволяет перемещаться как вперед, так и назад по элементам списка.
Интерфейс Map
Классы, которые реализуют этот интерфейс, хранят неупорядоченный набор объектов парами ключ/значение. Каждый ключ должен быть уникальным. Интерфейс Map не расширяет интерфейс Collection!
Интерфейс Iterator
Классы, реализующие интерфейс Iterator, позволяют перемещаться как вперед, так и назад по элементам коллекции. Все классы, которые реализуют интерфейс Collection, должны реализовать метод iterator, который возвращает объект, реализующий интерфейс Iterator. В интерфейсе Iterator определен метод remove, который позволяет удалить объект из коллекции, для которой Iterator был создан.
Основные методы:
public boolean hasNext() – возвращает true, если есть еще непросмотренные элементы public Object next() – возвращает следующий просматриваемый элемент public voi remove() – удаляет из коллекции последний элемент, который вернул итератор.
Классы
класс ArrayList
Java.util.ArrayList – реализует интерфейс List и представляет список. Объекты хранятся в порядке добавления. Можно добавлять и удалять элементы из любого места списка.
Основные методы:
public void add(Object element) – добавляет элемент в список public void add(int index, Object element) – добавляет элемент в список перед элементом с индексом index public Object remove(int index) – удаляет из списка элемент с заданным индексом public Object get(int index) – возвращает элемент по индексу public Object set(int index, Object element) – заменяет элемент с индексом index на новый элемент. public int size() – возвращает размер списка
Пример
класс HashMap
java.util.HashMap –предназначен для хранения пар объектов ключ/значение. Как для ключей, так и для элементов допускаются значения типа null. HashMap обеспечивает быстрый доступ к элементам. Порядок хранения элементов в этой коллекции не совпадает с порядком их добавления. Порядок элементов в коллекции также может меняться во времени.
Основные методы: public Object put(Object key, Object value)- добавляет элемент с заданным ключом и значением public Object get(Object key) - извлекает значение по заданному ключу public Set keySet() - возвращает множество ключей public Collection values() - возвращает множество значений
Пример
класс TreeMap
java.util.TreeMap – реализует интерфейс SortedMap. TreeMap содержит ключи в порядке возрастания. Используется либо натуральное сравнение ключей, либо должен быть реализован интерфейс Comparable. Реализация алгоритма поиска обеспечивает логарифмическую зависимость времени выполнения основных операций (containsKey, get, put и remove). Запрещено применение null` значений для ключей! При использовании дубликатов ключей ссылка на объект, сохраненный с таким же ключом, будет утеряна! Например:
Класс Collections
Класс Collections является классом-утилитой и содержит несколько вспомогательных методов для работы с классами, обеспечивающими различные интерфейсы коллекций. Например, для сортировки элементов списков:
Класс Arrays
Статический класс Arrays обеспечивает набор методов для выполнения операций над массивами, таких, как поиск, сортировка, сравнение.