Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсова з Прикладного програмування.doc
Скачиваний:
34
Добавлен:
17.11.2019
Размер:
1.01 Mб
Скачать

2 Об’єкти java

2.1 Характеристика класу TreeMap

Карта(map) — це об’єкт, який зберігає значення між ключами та значеннями. По заданому ключу можна знайти тип його значення. Як і ключі так і значення являються об’єктами Java. Ключі можуть бути унікальними, але їх значення дублюватись. Деякі карти допускають null-ключі та null-значення, деякі — ні.

Є один ключовий момент відносно карт, який важливо пам’ятати: всі вони не реалізуються інтерфейсом Iterable. Це означає, що ви не зможете проходити в циклі по карті використовуючи форму ''for each '' циклу for. Більш того ви не зможете отримати інтератор карти. Але можливо отримати представленні карти у вигляді колекції, які допускають використання як і циклу так і інтераторів.

Інтерфейс Map відображає унікальні ключі по їх значенню. Ключ — це об’єкт, який ви використовуєте для подальшого вилучення даних. Задаючи ключ та значення, можете переміщати значення в об’єкт Map. Після того як це значення збережене ви можете отримати його по ключу.

Об’явлення інтерфейсу Map:

interface Map<K, V>

де K — вказує тип значення, а V — тип даних, які зберігаються.

Методи об’явлення Map зібрані в таблиці 2.1. Деякі методи виключають використання ClassCastExeption, коли об’єкт являється несумісним з об’єктами карти. Виключення NullPointerExeption ініціюється якщо при намаганні використати null-об’єкт, коли дана карта цього не допускає. Виключення UnsupportedOperationException, що генерується при намаганні змінити карту, яка не модифіковується.

Карти використовуються навколо двох основних операцій: get() та put(). Для того щоб помістити значення в карту, використовуйте put(), попередньо вказавши ключ та значення. Для того щоб отримати значення виконайте get(), передаючи ключі в якості аргументів. Значення буде повернуто. Не дивлячись на те що карти являються частиною каркасу колекції, самі по собі вони не реалізують інтерфейс Collection, однак ви можете отримати представлення карт у вигляді колекцій. Для цього можна використати метод entrySet(). Він повертає Set, який містить елементи карти. Для того, щоб отримати колекційне представлення ключів використовуйте метод keyset().

Таблиця 2.1 - Методи використанні в Map

Метод

Опис

void clear()

Видаляє всі пари ''ключ-значення'' з викликаної карти

boolean containsKey(Object k)

Повертає true, якщо викликана карта містить ключ k. В протилежному випадку повертає false.

boolean containsValue(Object v)

Повертає true, якщо викликана карта містить ключ v. В протилежному випадку повертає false.

set<Map.Entry<K, V>> entrySet()

Повертає Set, який містить всі значення карти. Містить об’єкти типу Map.Entry. Тобто цей метод представляє карту у вигляді набору.

boolean equals(Object obj)

Повертає true, якщо obj — це Map, що містить знакові значення. В протележному випадку викликає false

boolean equals(Object obj)

Повертає true,якщо obj — Map, що містить одинакові значення. В протилежному випадку повертає false

V get (Object k)

Повертає значення асоційоване з ключем k. Повертає null якщо ключ не знайдений.

int hashCode()

Повертає хеш-код викликаної карти.

boolean isEmpty()

Повертає true, якщо викликана карта порожня. В протилежному випадку викликає false.

Set<K> keySet()

Повертає Set, котрий містить ключі викликаної карти. Цей метод викликає ключі викликаної карти у вигляді набору.

V put(K k, V v)

Переміщує елемент в викликану карту, перезаписуючи будь-яке попереднє значення, асоційоване з ключем. Ключ та значення це — k та v . Повертає null, якщо ключ раніше не існував. В протилежному випадку повертається попереднє значення, зв’язане з ключем.

void putAll(Map<? Extends K, ? extends V> m)

Поміщає всі значення з m в карту.

V remove (Object k)

Видаляє елемент ключ якого рівний k.

Int size()

Повертає число пар ''ключ-значення'' в карті.

Сollection<V> values()

Повертає колекцію, що містить значення карт. Цей метод представляє значення, що містяться в карті у вигляді колекції.

Для того, щоб отримати колекційне представлення значень, використовуйте values().

Колекційні представлення — це засоби, використовуючи які карти інтегруються у великий каркас колекцій.

Реалізацію інтерфейсів карт пропонують декілька класів. Класи котрі можуть бути використані для карт представленні в таблиці 2.2

Таблиця 2.2 - Класи котрі можуть бути використанні для карт

Клас

Функція

AbstractMap

Реалізує більшу частину інтерфейсу Map.

EnumMap

Розширює AbstractMap для використання з ключами enum.

HashMap

Розширює AbstractMap для використання хеш-таблиць.

TreeMap

Розширює AbstractMap для використання для використання дерева.

WeakHashMap

Розширює AbstractMap для використання хеш-таблиць зі слабкими ключами.

LinkedHashMap

Розширює HashMap, розширюючи інтератори у порядку вставки.

IndentifyHashMap

Розширює AbstractMap та використовує перевірку посилочної еквівалентності при порівняні документів.

Клас TreeMap розширює AbstractMap та реалізує інтерфейс NavigatebleMap. Він створює карту розміщену в деревоподібній структурі. TreeMap пропонує ефективний спосіб зберігання пар ''ключ — значення'' в сортованому порядку та дозволяє швидке вилучення. Потрібно відмітити, що на відміну від хеш-карт, карта-дерево(tree-map) гарантує, що її елементи будуть відсортовані в порядку росту ключів. TreeMap являється загальним класом з наступним об’явленням:

class TreeMap<K, V>

де K вказує тип ключів, а V — тип даних, що зберігаються

В TreeMap визначенні наступні конструктори:

TreeMap()

TreeMap(Comparator<? Super K> comp)

TreeMap(Map<? Extends K, ? extends V> m)

TreeMap(SortedMap<K, ? extends V> sm)

Перша форма створює пусту карту-дерево, яка буде відсортована з використанням простого порядку ключів. Друга форма конструює пусту карту, засновану на дереві, що буде відсортована з використанням Comparator Comp. Третя форма ініціалізує карту-дерево з елементами з m, що будуть відсортовані по звичайному порядку ключів. Четверта форма створює карту-дерево з елементами із sm, які будуть відсортовані в тому ж порядку що і sm.

TreeMap не визначає додаткових методів, крім тих, що присутні в інтерфейсі NavigableMap і в класі AbstractMap.

Клас TreeMap відрізняється від інших тим, що його елементи впорядковані по ключу.

Впорядкування, яке підтримується у відсортованій карті повинне бути у відповідності з еквівалентом, якщо воно відсортоване по карті, для правильного застосовування карти-інтерфейсу. Поведінка відсортованої карти є чітко визначеною, навіть якщо її упорядкування є несумісним.

Асинхронна реалізація. Якщо кілька потоків отримали доступ до карти одночасно, то принаймні один з потоків змінює карту структурно, в такому випадку вона повинна бути синхронізована зовні. Це звичайно досягається шляхом синхронізації на певний об’єкт, що, природньо інкапсулює карту. Якщо такий об'єкт існує, карта повинна бути "загорнута" з використанням методу Collections.synchronizedMap. Найкраще це робити під час програмування, для запобігання випадкового несинхронізованого доступу до карти:

Map m = Collections.synchronizedMap (new TreeMap (...));

public TreeMap() створює нову порожню карту, яка сортуються відповідно до "природного порядку ключів. Всі ключі, які вставлені в карту повинні реалізувати порівняльний інтерфейс. Крім того, всі такі ключі повинні бути порівнянні між собою та не повинні покидати ClassCastException для будь-яких елементів K1 і K2 в карті. Якщо користувач намагається покласти ключ в карту, яка порушує це обмеження (наприклад, користувач намагається поставити рядок ключа в карту, ключі якої є цілими числами) користувач повинен викликати ClassCastException.

public TreeMap (Comparator с) створює нову порожню карту, яка сортуються відповідно до даного компаратора. Всі ключі вставлені в карту повинні бути порівнянні між собою по даному компаратору: comparator.compare (K1, K2), які не повинні покидати ClassCastException для будь-якого ключа K1 і K2 в карті. Якщо користувач намагається покласти ключ в карту, яка порушує це обмеження, потрібно викликати ClassCastException.

Параметри:

C — компаратор, який буде використовуватися для сортування карти. Null значення вказує, що ключі повинні бути використанні "природного порядку".

public TreeMap ( Map m) створює новий шар, що містить ті ж відображення в якості даної карти, які сортуються відповідно до ключів «природного порядку». Всі ключі вставлені в новій карті повинні бути реалізовані порівняльним інтерфейсом. Цей метод працює в N * Log (N) часу.

public TreeMap ( SortedMap m)

Створює новий шар, що містить такі самі карти як і SortedMap та сортуються відповідно з тим самим порядком. Цей метод працює за лінійний час.