HashMap
// Создание и заполнение HashMap
Map hashMap = new HashMap<>();
hashMap.put("one", 1);
hashMap.put("two", 2);
hashMap.put("three", 3);
// Получение значения по ключу
int value = hashMap.get("two");
System.out.println("Value for key 'two': " + value);
HashMap - это реализация интерфейса Map, которая представляет собой структуру данных, которая позволяет хранить пары ключ-значение и обеспечивает эффективный доступ к значениям по ключу. HashMap основан на хеш-таблице, что позволяет достигать высокой производительности при операциях вставки, удаления и поиска элементов. Вот как это работает:
- Вставка элемента:
При вставке элемента в HashMap, вы передаете ключ и значение. Сначала вычисляется хеш-код ключа с использованием метода hashCode(). Затем этот хеш-код преобразуется в индекс внутреннего массива (бакета) с помощью функции хеширования (обычно путем выполнения операции % на размере массива). Если в соответствующем бакете уже есть элементы, то новый элемент может быть добавлен в виде связанного списка или более сложной структуры данных, в зависимости от реализации HashMap. - Поиск элемента:
Для поиска значения по ключу, вы передаете ключ методу get(). Здесь снова вычисляется хеш-код ключа и определяется индекс бакета. Затем HashMap проверяет все элементы в этом бакете, чтобы найти соответствующий ключ. Если есть несколько элементов с одинаковым хеш-кодом (коллизия), они могут быть проверены последовательно, пока не будет найден элемент с соответствующим ключом. - Удаление элемента:
При удалении элемента по ключу, HashMap также вычисляет хеш-код ключа и находит соответствующий бакет. Затем элемент удаляется из этого бакета. Если в бакете есть несколько элементов, они могут быть перебраны для поиска правильного элемента.
Важно отметить, что хеширование и коллизии могут повлиять на производительность HashMap. Хорошая реализация должна уметь эффективно обрабатывать коллизии, чтобы обеспечить быстрый доступ к элементам.
HashMap также автоматически увеличивает свою емкость, когда количество элементов в нем превышает определенный порог, чтобы уменьшить вероятность коллизий и сохранить высокую производительность.