Главная » Java » Коллекции

0

   (collections) — иногда называемые контейнерами (containers) — это хранилища, поддерживающие разнообразные способы накопления и упорядочения объектов с целью обеспечения возможностей эффективного доступа к ним. Выбор критериев эффективности зависит от назначения коллекции, и поэтому в Java разработано множество самых различных типов коллекций, удовлетворяющих всевозможным требованиям. Модель коллекции отнюдь не нова: в большинстве систем программирования существуют те или иные структуры данных, которые можно было бы назвать коллекциями, — от самых незатейливых до всеобъемлющих и поистине "всеядных".

   В составе пакета java.util вы найдете набор последовательных и гибких интерфейсов, обеспечивающих поддержку общей инфраструктуры коллекций, и ряд эффективных реализаций таких интерфейсов.

   Инфраструктура коллекций Java лаконична и выразительна. В процессе ее проектирования были поставлены следующие цели: создать общее ядро, состоящее из набора полезных абстрактных моделей и ряда реализаций, допускающих применение в самых обширных пределах, и избежать соблазна построения исчерпывающего множества инструментов, логически полного, но при этом заведомо сложного и не поддающегося восприятию.

   Одно из проектных решений, позволяющее умерить "аппетиты" и не впасть в крайности, связано с отказом от возможности тщательной проработки деталей в Рамках каждого из мелких и мельчайших частных классов, реализующих необозримое множество типов и подтипов коллекций, в пользу представления емких и пло-Дотворных абстракций в составе интерфейсов. Каждый отдельный интерфейс не заботится" о поддержке различных концепций масштабирования структуры, защиты Данных и т.п. Напротив, методы, позволяющие выполнять все необходимые общие операции, предусмотрены в ключевом наборе интерфейсов; при этом конкре ным реализациям предоставляется право отказа от осуществления той или иной оп рации,  не отвечающей контексту,  посредством выбрасывания  необъявляемого ис ключения типа Java. lang.unsupportedOperationException.

  

* Collection —  базовый  (корневой)  интерфейс  коллекций;   в  нем  преду

смотрены   основополагающие   методы,   такие   как   add,    remove,   size,

toArray и (весьма важный) iterator.

* Set — коллекция-множество (set), не допускающая наличия одинаковых

элементов  и  не  предусматривающая  специальных  правил  упорядочения

элементов (интерфейс является производным от Collection).

*SortedSet — коллекция Set, элементы которой допускают упорядочение

(интерфейс является производным от Set).

* List — коллекция-список (list), элементы которой сохраняют определен

ный порядок следования до тех пор, пока список не будет изменен прину

дительно (интерфейс является производным от Collection).

* Map —   коллекция   соответствий  (тар),   в   которой   каждому  элементу-

ключу (key) отвечает не больше одного элемента-значения (value). (Map не

наследует интерфейс Collection, хотя общность концепций, моделируе

мых обоими интерфейсами, подчеркивается наличием в них одноименных

методов,  и  коллекции соответствий,   вообще  говоря,   могут трактоваться

как "обычные" коллекции.)

* SortedMap — коллекция Map, элементы которой допускают упорядочение

(интерфейс является производным от Map)

 

* Iterator — интерфейс-u/nepamop (iterator) для построения объектов, которые обеспечивают получение отдельных элементов коллекции. К этому типу относятся объекты, возвращаемые методом Col lection. iterator.

* Listlterator— итератор для использования в контексте коллекций-списков List. К этому типу относятся объекты, возвращаемые методом Li st.listlterator.

Интерфейсы SortedSet и SortedMap подразумевают, что процесс итеративного обращения к элементам выполняется в определенном порядке. О том, как задавать критерии упорядочения элементов коллекции, будет рассказано ниже.

  Пакет Java.util содержит также ряд весьма полезных конкретных реализаций перечисленных интерфейсов, позволяющих удовлетворить большинству практических потребностей.

 

* HashSet —     реализация     интерфейса     Set     на     основе     хеш-таблицы

(hashtable). Добротное решение общего назначения, обеспечивающее неза

висимость производительности операций поиска,  добавления и удаления

элементов от объема коллекции.

* TreeSet — реализация интерфейса SortedSet на основе модели сбалан

сированного бинарного дерева (balanced binary tree).  Обеспечивает менее

высокие показатели производительности операций поиска и модификации

данных в коллекции в сравнении с HashSet, но поддерживает заданный

порядок следования элементов.

* ArrayList— реализация интерфейса List на основе массива изменяемого

размера (resizable array). Если список достаточно велик, операции добавления

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

низкое быстродействие. Обеспечивает достаточно высокую среднюю произво

дительность операций при произвольном доступе (random access) к данным.

* LinkedList— реализация интерфейса  List  на основе модели двусвязного

списка    (doubly-linked    list),    поддерживающей    последовательный    доступ

(sequential access) к данным. Операции модификации эффективны при любом

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

там относительно "медлительны". Тип полезен для создания очередей (queues).

* HashMap —  реализация  интерфейса Map  на основе хеш-таблицы.  Весьма

полезная  реализация  общего  назначения,   обеспечивающая  относительно

высокую производительность операций поиска и изменения данных.

* ТгееМар — реализация интерфейса SortedMap на основе модели сбалан

сированного бинарного дерева,  обеспечивающая механизм хранения эле

ментов, упорядоченных по ключу. Тип полезен при работе с упорядочен

ными наборами данных при умеренных требованиях к производительности

операций поиска по ключу.

* WeakHashMap — реализация интерфейса Map на основе хеш-таблицы, пре

дусматривающая обращение к ключам посредством объектов слабых ссы

лок (weak references) класса WeakReference (см. раздел 12.5.2 ). Тип находит только ограниченное применение.

Все названные классы реализуют также интерфейсы Cloneable и Serializable.

   Начало этой главы мы посвятим рассмотрению механизмов итерации и рядочения элементов, поскольку они значимы и важны для многих классов ко лекций. Затем мы представим вашему вниманию сведения о типах коллекций производных от Collection и Map. Далее будет рассказано о том, как использо’ вать версии коллекций, не допускающих изменения данных и поддерживающих средства синхронизации, а также о том, как создавать собственные итераторы и типы коллекций, если существующие не удовлетворяют конкретным требованиям. Наконец, мы упомянем устаревшие типы из состава пакета java.util, которые выходят за рамки современной стройной системы коллекций Java, но все еще употребляются в существующем коде. Один из таких типов, Properties однако, активно используется и поныне.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии