HashMap

Слово HashMap содержит слово map — карта. Только не пытайтесь найти сходство с картами в географическом атласе, с гуглокартами, с Яндекс.Картами или, на худой конец, с игральными картами. Это карточка в картотеке. Вы заполняете карточки какими-то данными и кладёте их в ящик. Если вы содержите гостиницу для котов, то скорее всего вы занесёте в карточку имя кота, возраст и т.п.

Класс HashMap использует хеш-таблицу для хранения карточки, обеспечивая быстрое время выполнения запросов get() и put() при больших наборах. Класс реализует интерфейс Map (хранение данных в виде пар ключ/значение). Ключи и значения могут быть любых типов, в том числе и null. При этом все ключи обязательно должны быть уникальны, а значения могут повторяться. Данная реализация не гарантирует порядка элементов.

Общий вид HashMap:

class HashMap<K, V>
// K - это Key (ключ), V - Value (значение)

Объявить можно следующим образом:

Map<String, Integer> hm = new HashMap<String, Integer>();
// или так
Map<String, String> hashmap = new HashMap<String, String>();

Пример:

// Создадим HashMap
Map<String, Integer> hm = new HashMap<String, Integer>();

// Помещаем данные на карточку
hm.put("Васька", new Integer(5));
hm.put("Мурзик", new Integer(8));
hm.put("Рыжик", new Integer(12));
hm.put("Барсик", new Integer(5));

// Получаем набор элементов
Set<Map.Entry<String, Integer>> set = hm.entrySet();

// Отобразим набор
for (Map.Entry<String, Integer> me : set) {
    System.out.print(me.getKey() + ": ");
    System.out.println(me.getValue());
}

// Добавляем значение
int value = hm.get("Рыжик");
hm.put("Рыжик", value + 3);
System.out.println("У Рыжика стало " + hm.get("Рыжик"));

Вопрос 1.

Если необходимо создать список фамилий с номерами паспортов, какое из этих значений занести в key, а какое в value? Почему?

Вопрос 2.

Что произойдет при попытке внести в HashMap пару ключ-значение с уже существующим ключом?

Last updated