русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


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


Дата додавання: 2014-11-28; переглядів: 946.


Карта(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 та сортуються відповідно з тим самим порядком. Цей метод працює за лінійний час.


<== попередня лекція | наступна лекція ==>
Порівняльна характеристика середовищ розробки прикладних програм на мові JAVA | Опис методу list()


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн