Вводный курс. Язык программирования Java
- Вводный курс. Язык программирования Java
- Просмотров: 3186
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<k,>: возвращает набор элементов коллекции. Все элементы представляют объект 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 keySet(): возвращает набор всех ключей отображения
- Collection values(): возвращает набор всех значений отображения
- void putAll(Map 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 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));</string,></string,>
// Вывод содержимого коллекции map
System.out.println(map);
// Создание второго объекта HashMap
HashMap<string, integer=""> map2 = new HashMap<string, integer="">();</string,></string,>
// Добавление пары ключ-значение
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());
}</string,></map.entry<string,>
// Вывод всего набора ключей
Set keys = map.keySet();
System.out.println(keys);
// Вывод всего набора значений
Collection 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="">>();</string,></string,>
// Создаем arrayList и записываем значения для первого ключа
ArrayList listName = new ArrayList();
listName.add("name1");
listName.add("name2");
listName.add("name3");
// Создаем arrayList и записываем значения для второго ключа
ArrayList listPhoto = new ArrayList();
listPhoto.add("photo1");
listPhoto.add("photo2");
listPhoto.add("photo3");
listPhoto.add("photo4");
// помещаем значения для каждого ключа в коллекцию multiMap
multiMap.put("name", listName);
multiMap.put("photo",listPhoto);
// получим весь набор ключей
Set mkeys = multiMap.keySet();
System.out.println("набор ключей: " + mkeys);
// Получаем набор записей
Set<entry<string, arraylist<string="">>> setMap = multiMap.entrySet();</entry<string,>
// Создаем итератор
Iterator<entry<string, arraylist<string="">>> iteratorMap = setMap.iterator();</entry<string,>
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 mValues = entry.getValue();
System.out.println("Ключ = '" + key + "' его значения: " + mValues);
}
}</string,></string,>
Будет выведено:
{май=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]