Краткий конспект по коллекциям в Java

Применять вместо массивов, когда необходимо динамическое изменение размера структуры данных, или автоматическое упорядочение структуры данных по мере добавления элементов и т.п.

Примитивы хранить нельзя, для этого есть специальные реализации коллекций, например Trove library или PCJ(Primitive Collections for Java) .

Два базовых интерфейса, их реализации представляют совокупность всех классов коллекций: 1. Collection - коллекция содержит набор объектов. 2. Map - описывает коллекцию, состоящую из пар "ключ - значение".

Эти базовые интерфейсы расширяются другими интерфейсами, добавляющими дополнительный функционал.

Основные интерфейсы, относящиеся к Collections

Интерфейс Collection на самом деле не базовый, а расширяет Iterable, следовательно любая коллекция возвращает итератор. Итератор - паттерн, позволяющий получить доступ к элементам любой коллекции без вникания в суть ее реализации.

  1. List - упорядоченная, но не отсортированная коллекция, в которой допустимы дублирующие значения. Элементы такой коллекции пронумерованы, начиная от нуля, к ним можно обратиться по индексу.

Реализации List

Реализации Set

Реализации Queue

Реализации интерфейса Map

Интерфейс Map соотносит уникальные ключи со значениями. Ключ - это объект, который используется для последующего извлечения данных. Задавая ключ и значение, можно помещать значения в map-объект. После сохранения значения можно получить его по ключу. Интерфейс Map - это обобщенный интерфейс, объявленный так:


	  interface Мар<К, V>
	  

Где "К" указывает тип ключей, а "V" - тип хранимых значений.

Устаревшие коллекции

Использовать не рекомендуется. 1. Enumeration - аналог интерфейса Iterator. 2. Vector - аналог класса ArrayList; поддерживает упорядоченный список элементов, хранимых во "внутреннем" массиве. 3. Stack - класс, производный от Vector, в который добавлены методы вталкивания (push) и выталкивания (pop) элементов, так что список может трактоваться в терминах, принятых для описания структуры данных стека (stack). 4. Dictionary - аналог интерфейса Map, хотя представляет собой абстрактный класс, а не интерфейс. 5. Hashtable - аналог HashMap.

Все методы в Hashtable, Stack, Vector являются синхронизированными, что делает их менее эффективными в одно поточных приложениях.

Синхронизированные коллекции

Условно потокобезопасные, так как при высокой нагрузке выкидывают NullPointerException или ConcurrentModificationException. Получить синхронизированные объекты коллекций можно с помощью статических методов synchronizedMap и synchronizedList класса Collections:


	  Map m = Collections.synchronizedMap(new HashMap());
	  List l = Collections.synchronizedList(new ArrayList());
	  


На главную
К началу страницы