АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

First: Brest

Читайте также:
  1. Financial Crisis Was Avoidable, Inquiry Finds
  2. ORAL APPROACH: A CURRENT VIEW
  3. RPPAYSP (РП. Спецификация расчетов)
  4. The Glimpse of Great Britain and Its Parliament Life
  5. TreeSet()
  6. XMLReaderFactory.createXMLReader(
  7. XMLStreamConstants.ENTITY_DECLARATION
  8. Браки и разводы 5 страница
  9. Вопрос 15.5.
  10. Восприятие новой информации через призму старой.
  11. Глоссарий 14 страница

Between Minsk and Polotsk: [Minsk, Mosсow]

Before Minsk: [Brest]

After Minsk: [Mosсow, Polotsk]

Карты отображений

Карта отображений – это объект, который хранит пару “ключ-значение”. Поиск объекта (значения) облегчается по сравнению с множествами за счет того, что его можно найти по его уникальному ключу. Уникальность объектов-ключей должна обеспечиваться переопределением методов hashCode() и equals() пользовательским классом. Если элемент с указанным ключом отсутствует в карте, то возвращается значение null.

Классы карт отображений:

AbstractMap<K,V> – реализует интерфейс Map<K,V>;

HashMap<K,V> – расширяет AbstractMap<K,V>, используя хэш-таблицу, в которой ключи отсортированы относительно значений их хэш-кодов;

TreeMap<K,V> – расширяет AbstractMap<K,V>, используя дерево, где ключи расположены в виде дерева поиска в строгом порядке.

WeakHashMap<K,V> позволяет механизму сборки мусора удалять из карты значения по ключу, ссылка на который вышла из области видимости приложения.

LinkedHashMap<K,V> запоминает порядок добавления объектов в карту и образует при этом дважды связанный список ключей. Этот механизм эффективен, только если превышен коэффициент загруженности карты при работе с кэш-памятью и др.

Рис. 10.3. Иерархия наследования карт

Для класса IdentityHashMap<K,V> хэш-коды объектов-ключей вычисляются методом System.identityHashCode() по адресу объекта в памяти, в отличие от обычного значения hashCode(), вычисляемого сугубо по содержимому самого объекта.

Интерфейсы карт:

Map<K,V> – отображает уникальные ключи и значения;

Map.Entry<K,V> – описывает пару “ключ-значение”;

SortedMap<K,V> – содержит отсортированные ключи и значения;

NavigableMap<K,V> – добавляет новые возможности поиска по ключу.

Интерфейс Map<K,V> содержит следующие методы:

void clear() – удаляет все пары из вызываемой карты;

boolean containsKey(Object key) – возвращает true, если вызывающая карта содержит key как ключ;

boolean containsValue(Object value) – возвращает true, если вызывающая карта содержит value как значение;

Set<Map.Entry<K,V>> entrySet() – возвращает множество, содержащее значения карты;

Set<K> keySet() – возвращает множество ключей;

V get(Object obj) – возвращает значение, связанное с ключом obj;

V put(K key, V value) – помещает ключ key и значение value в вызывающую карту. При добавлении в карту элемента с существующим ключом произойдет замена текущего элемента новым. При этом метод возвратит заменяемый элемент;

void putAll(Map <? extends K,? extends V> t) – помещает коллекцию t в вызывающую карту;

V remove(Object key) – удаляет пару “ключ-значение” по ключу key;

Collection<V> values() – возвращает коллекцию, содержащую значения карты.

Интерфейс Map.Entry<K,V> содержит следующие методы:

K getKey() – возвращает ключ текущего входа;

V getValue() – возвращает значение текущего входа;

V setValue(V obj) – устанавливает значение объекта obj в текущем входе.

В примере показаны способы создания хэш-карты и доступа к ее
элементам.

/* пример # 14: создание хэш-карты и замена элемента по ключу:

DemoHashMap.java */

package chapt10;

import java.util.*;

 

public class DemoHashMap {

public static void main(String[] args){

HashMap<Integer, String> hm =

new HashMap<Integer, String>(5);

for (int i = 11; i < 15; i++)

hm.put(i, i + "EL");

System. out. println(hm);

hm.put(12, "14EL");

System. out. println(hm + "с заменой элемента");

String a = hm.get(12);

System. out. println(a + " - найден по ключу '12'");

/* вывод хэш-таблицы с помощью методов интерфейса

Map.Entry<K,V> */

Set<Map.Entry<Integer, String>> setvalue =

hm.entrySet();

System. out. println(setvalue);

Iterator<Map.Entry<Integer, String>> i =

setvalue.iterator();

while (i.hasNext()) {

Map.Entry<Integer, String> me = i.next();

System. out. print(me.getKey()+": ");

System. out. println(me.getValue());

}

}

}

{13=13EL, 14=14EL, 12=12EL, 11=11EL}

{13=13EL, 14=14EL, 12=14EL, 11=11EL}с заменой элемента

14EL - найден по ключу '12'

[13=13EL, 14=14EL, 12=14EL, 11=11EL]

EL

EL

EL

EL

Ниже приведен фрагмент кода корпоративной системы, где продемонстрированы возможности класса HashMap<K,V> и интерфейса Map.Entry<K,V> при определении прав пользователей.

/* пример # 15: применение коллекций при проверке доступа в систему:

DemoSecurity.java */

package chapt10;

import java.util.*;

 

public class DemoSecurity {

public static void main(String[] args) {

CheckRight. startUsing (2041, "Артем");

CheckRight. startUsing (2420, "Ярослав");

/*

*добавление еще одного пользователя и

* проверка его на возможность доступа

*/

CheckRight. startUsing (2437, "Анастасия");

CheckRight. startUsing (2041, "Артем");

}

}

/* пример # 16: класс проверки доступа в систему: CheckRight.java */

package chapt10;

import java.util.*;

 

public class CheckRight {

private static HashMap<Integer, String> map =

new HashMap<Integer, String> ();

 

public static void startUsing(int id, String name) {

if (canUse(id)){

map.put(id, name);

System. out. println("доступ разрешен");

} else {

System. out. println("в доступе отказано");

}

}

public static boolean canUse(int id) {

final int MAX_NUM = 2; // заменить 2 на 3

int currNum = 0;

if (!map.containsKey(id))

currNum = map.size();

return currNum < MAX_NUM;

}

}

В результате будет выведено:


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.)