- •Лабораторная работа 8 Использование коллекций в Java
- •3.2. Интерфейсы коллекций
- •3.2. Реализации коллекций и алгоритмы
- •3.2.1. Классы AbstractSet, AbstractList, AbstractSequentialList и AbstractMap
- •3.2.2. Класс HashSet
- •3.2.3. Класс ArrayList
- •3.2.4. Класс LinkedList
- •3.2.5. Класс HashMap
- •3.2.6. Класс Collections
- •3.3. Создание диалоговых окон в NetBeans ide 6.1
- •4. Порядок выполнения работы
- •Вариант 6-01
- •Вариант 6-02
- •Вариант 6-03
- •Вариант 6-04
- •Вариант 6-05
- •Вариант 6-06
- •Вариант 6-07
- •Вариант 6-08
- •Вариант 6-09
- •Вариант 6-10
- •Вариант 6-11
- •Вариант 6-12
- •Вариант 6-13
- •Вариант 6-14
- •Вариант 6-15
- •Вариант 6-16
- •Вариант 6-17
- •Вариант 6-18
- •Вариант 6-19
- •Вариант 6-20
- •Вариант 6-21
- •Вариант 6-22
- •Вариант 6-23
- •Вариант 6-24
- •Вариант 6-25
- •Вариант 6-26
- •Вариант 6-27
- •Вариант 6-28
- •Вариант 6-29
- •Вариант 6-30
- •5. Содержание отчета
- •6. Вопросы для самоконтроля
3.2. Реализации коллекций и алгоритмы
Реализации являются действительными объектами данных, которые воплощают в жизнь ключевые интерфейсы коллекций, описанные в предыдущем разделе.
Существуют три типа реализаций:
общецелевые реализации;
упаковщики;
альтернативные (convenience) реализации.
Общецелевые реализации и их связь с интерфейсами и структурами данных представлены в таблице:
Интерфейс |
Реализации |
|||
|
Хеш-таблица |
Изменяемый массив |
Сбалансирован-ное дерево |
Связанный список |
Set |
HashSet |
|
TreeSet |
LinkedHashSet |
List |
|
ArrayList |
|
LinkedList |
Map |
HashMap WeekHashMap |
|
TreeMap |
LinkedHashMap |
Все реализации имеют не только схожие имена, но и схожее поведение. Все они реализуют каждую из операций, определенных в своем интерфейсе. Все позволяют использовать элементы, ключи и значения с константой null.
Основным при реализации структур данных является выбор интерфейса. В большинстве случаев выбор реализации влияет только на производительность программы. Поэтому предпочтительным стилем программирования является: сначала создание коллекции, затем выбор реализации и присваивание новой коллекции переменной соответствующего интерфейсного типа (или передача коллекции методу, ожидающему аргумент интерфейсного типа). Таким образом, программа становится независимой от любых добавляемых новых методов в данной реализации, оставляя за программистом право изменения реализации, если это необходимо для эффективности программы.
3.2.1. Классы AbstractSet, AbstractList, AbstractSequentialList и AbstractMap
Класс AbstractSet является суперклассом для классов HashSet и TreeSet и содержит реализации методов equals() и removeAll() интерфейса Set.
Класс AbstractList является суперклассом для классов AbstractSequentialList, ArrayList, Vector и содержит реализации двух методов add(), методов addAll(), clear(), equals(), get(), indexOf(), iterator(), lastIndexOf(), listIterator(), remove(), set(), sublist() интерфейса List.
Класс AbstractList содержит также метод
protected void removeRange(int fromIndex, int toIndex)
который позволяет удалить элементы списка в заданном диапазоне.
Класс AbstractSequentialList является суперклассом для класса LinkedList и содержит реализации методов add(), addAll(), get(), iterator(), listIterator(), remove()и set() интерфейса List.
Класс AbstractMap является суперклассом для классов HashMap, TreeMap и WeakHashMap и содержит реализации методов clear(), containsKey(), containsValue(), entrySet(), equals(), get(), isEmpty(), keySet(), put(), putAll(), remove(), size() и values()интерфейса Map. Кроме того, класс AbstractMap содержит метод
protected Object clone()
позволяющий получить пустую копию отображения (ключи и значения не копируются), а также метод
public String toString()
позволяющий преобразовать отображение в строковое представление.
