> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-java/kollekciya-hashmap.md).

# Коллекция HashMap

`HashMap` в Java представляет собой реализацию интерфейса `Map`, который представляет отображение ключ-значение. Он хранит элементы в виде пары ключ-значение и обеспечивает быстрый доступ к элементам по ключу.

1. **Уникальные ключи**: `HashMap` не может содержать дубликатов ключей. Каждый ключ должен быть уникальным.
2. **Динамическое увеличение размера**: `HashMap` автоматически расширяет свой размер при необходимости, когда добавляются новые элементы, чтобы обеспечить эффективное хранение данных.
3. **Отсутствие порядка**: Элементы в `HashMap` не упорядочены. Порядок элементов может меняться с течением времени в зависимости от хэш-функции и коллизий.
4. **Быстрый доступ к элементам**: `HashMap` обеспечивает быстрый доступ к элементам по ключу. В среднем случае (при хорошей хэш-функции) операции `get()` и `put()` имеют временную сложность O(1).
5. **Разрешение коллизий**: `HashMap` использует хэш-таблицу для хранения данных и разрешения коллизий при необходимости. При возникновении коллизий элементы хранятся в виде цепочек (списков) или вторичных таблиц, в зависимости от размера таблицы и числа коллизий.
6. **Несинхронизированность**: `HashMap` не является синхронизированным, поэтому он не подходит для использования в многопоточных приложениях без дополнительной синхронизации.

Пример использования `HashMap`:

```java
import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>();

        // Добавление элементов
        map.put("apple", 10);
        map.put("banana", 20);
        map.put("orange", 30);

        // Получение значения по ключу
        int value = map.get("banana");
        System.out.println("Значение для ключа 'banana': " + value);

        // Проверка наличия ключа
        boolean containsKey = map.containsKey("orange");
        System.out.println("Содержит ключ 'orange'? " + containsKey);

        // Удаление элемента по ключу
        map.remove("apple");

        // Итерация по парам ключ-значение
        for (String key : map.keySet()) {
            int val = map.get(key);
            System.out.println(key + ": " + val);
        }
    }
}
```
