33. Интерфейс Map, Класс HashMap

В Map (отображение) добавляются не отдельные объекты, а пары объектов (ключ, значение). Доступ к значению в коллекции получают по ключу.

Основные методы:

  • void clear(): очищает коллекцию
  • boolean containsKey(Object k): возвращает true, если коллекция содержит ключ k
  • boolean containsValue(Object v): возвращает true, если коллекция содержит значение v
  • Set<Map.Entry<K, V>> entrySet(): возвращает набор элементов коллекции. Все элементы представляют объект Map.Entry
  • boolean equals(Object obj): возвращает true, если коллекция идентична коллекции, передаваемой через параметр obj
  • boolean isEmpty: возвращает true, если коллекция пуста
  • V get(Object k): возвращает значение объекта, ключ которого равен k. Если такого элемента не окажется, то возвращается значениеnull
  • V put(K k, V v): помещает в коллекцию новый объект с ключом k и значением v. Если в коллекции уже есть объект с подобным ключом, то он перезаписывается. После добавления возвращает предыдущее значение для ключа k, если он уже был в коллекции. Если же ключа еще не было в коллекции, то возвращается значениеnull
  • Set<K> keySet(): возвращает набор всех ключей отображения
  • Collection<V> values(): возвращает набор всех значений отображения
  • void putAll(Map<? extends K, ? extends V> map): добавляет в коллекцию все объекты из отображения map
  • V remove(Object k): удаляет объект с ключом k
  • int size(): возвращает количество элементов коллекции

 

Класс HashMap

Коллекция HashMap не является упорядоченной: порядок хранения элементов зависит от хэш-функции.  Для прохода по всем HashMap объектам с помощью метода values() получаем список объектов и далее, проходим по списку используя итератор. Последовательность объектов при таком проходе произвольная.

 

Класс HashMap имеет несколько конструкторов:

  • HashMap(): конструктор с используемыми по умолчанию значениями начальной емкости (16) и коэффициентом загрузки (0.75)
  • HashMap(int initialCapacity): конструктор с используемым по умолчанию значением коэффициентом загрузки (0.75) и начальной емкостью initialCapacity
  • HashMap(int initialCapacity, float loadFactor): конструктор с используемыми значениями начальной емкости initialCapacity и коэффициентом загрузки loadFactor
  • HashMap(Map<? extends K,? extends V> m): конструктор с определением структуры согласно указанному параметру.

 

Пример использования методов HashMap.

 
public static void main(String[] args) {
 // Создание объекта HashMap
 // параметр size()  и коэффициент загрузки: по умолчанию
 HashMap<String, Integer> map = new HashMap<String, Integer>();
 // Добавление пары ключ-значение
 map.put("январь", new Integer(1));
 map.put("февраль",new Integer(2));
 map.put("март", new Integer(3));
 map.put("апрель", new Integer(4));
 map.put("май", new Integer(5));
// Вывод содержимого коллекции map
 System.out.println(map);
// Создание второго объекта HashMap 
 HashMap<String, Integer> map2 = new HashMap<String, Integer>();
// Добавление пары ключ-значение
 map2.put("июнь", new Integer(6) );
 map2.put("июль",new Integer(7));
 map2.put("август", new Integer(8));
// Добавление набора элементов объекта map2 к map1 
 map.putAll(map2);
// Вывод содержимого коллекции map
 System.out.println(map);
// Количество элементов коллекции map
 System.out.println("map содержит: " + map.size() + " элементов");
// Удаление объекта по ключу "май"
 map.remove("май");
// Количество элементов коллекции map
 System.out.println("map содержит: " + map.size() + " элементов");
// Поиск по ключу
 String exists = (map.containsKey("апрель")) ? "найден" : "не найден";
 System.out.println("Объект с ключом 'апрель' " + exists);
// Поиск по значению
 exists = (map.containsValue(4)) ? "найден" : "не найден";
 System.out.println("Объект со значением 4 " + exists);
// Перебор элементов
 Set<Map.Entry<String, Integer>> set = map.entrySet();
 for (Map.Entry<String, Integer> me : set) {
 System.out.println("ключ : " + me.getKey() + ", значение = " + me.getValue());
 }
// Вывод всего набора ключей
 Set<String> keys = map.keySet();
 System.out.println(keys);
// Вывод всего набора значений
 Collection<Integer> values = map.values();
 System.out.println(values);
// Замена значения
 map.replace("январь",12);
 System.out.println(map);
// Очистка объекта map
 map.clear();
 System.out.println("Размер набора данных: " + map.size());

 // hashMap с несколькими значения для одного ключа 
 //и параметрами size() коэффициентом загрузки по умолчанию
 HashMap<String, ArrayList<String>> multiMap = new HashMap<String, ArrayList<String>>();
// Создаем arrayList и записываем значения для первого ключа
 ArrayList<String> listName = new ArrayList<String>();
 listName.add("name1");
 listName.add("name2");
 listName.add("name3");
// Создаем arrayList и записываем значения для второго ключа
 ArrayList<String> listPhoto = new ArrayList<String>();
listPhoto.add("photo1");
 listPhoto.add("photo2");
 listPhoto.add("photo3");
 listPhoto.add("photo4");
// помещаем значения для каждого ключа в коллекцию multiMap
 multiMap.put("name", listName);
 multiMap.put("photo",listPhoto);
// получим весь набор ключей
 Set<String> mkeys = multiMap.keySet();
 System.out.println("набор ключей: " + mkeys);
// Получаем набор записей
 Set<Entry<String, ArrayList<String>>> setMap = multiMap.entrySet();
// Создаем итератор
 Iterator<Entry<String, ArrayList<String>>> iteratorMap = setMap.iterator();
System.out.println();
 System.out.println("hashMap с несколькими значения для одного ключа");
// Выводим все элементы
 while(iteratorMap.hasNext()) {
 Map.Entry<String, ArrayList<String>> entry =
 (Map.Entry<String, ArrayList<String>>) iteratorMap.next();
 String key = entry.getKey();
 List<String> mValues = entry.getValue();
 System.out.println("Ключ = '" + key + "' его значения: " + mValues);
 }
 }

Будет выведено:

{май=5, февраль=2, апрель=4, январь=1, март=3}
{август=8, май=5, февраль=2, апрель=4, январь=1, март=3, июль=7, июнь=6}
map содержит: 8 элементов
map содержит: 7 элементов
Объект с ключом 'апрель' найден
Объект со значением 4 найден
ключ : август, значение = 8
ключ : февраль, значение = 2
ключ : апрель, значение = 4
ключ : январь, значение = 1
ключ : март, значение = 3
ключ : июль, значение = 7
ключ : июнь, значение = 6
[август, февраль, апрель, январь, март, июль, июнь]
[8, 2, 4, 1, 3, 7, 6]
{август=8, февраль=2, апрель=4, январь=12, март=3, июль=7, июнь=6}
Размер набора данных: 0
набор ключей: [name, photo]

hashMap с несколькими значения для одного ключа
Ключ = 'name' его значения: [name1, name2, name3]
Ключ = 'photo' его значения: [photo1, photo2, photo3, photo4]

 

 

 

 

Добавить комментарий
  • Комментарии не найдены
 
DMC Firewall is a Joomla Security extension!