Java HashMap

Java 集合框架Java Collections Framework

HashMap — это хеш-таблица, которая хранит сопоставления ключ-значение.

HashMap реализует интерфейс Map, хранит данные на основе HashCode ключа, имеет очень высокую скорость доступа, допускает не более одной записи с ключом null и не поддерживает синхронизацию потоков.

HashMap неупорядочен, то есть не сохраняет порядок вставки.

HashMap наследует AbstractMap и интерфейсы Map, Cloneable и java.io.Serializable.

Типы ключей и значений HashMap могут быть одинаковыми или разными. Это могут быть ключи и значения String либо ключи Integer и значения String.

Элементы в HashMap на самом деле являются объектами. Некоторые распространённые базовые типы могут использовать свои классы-обёртки.

Таблица классов-обёрток, соответствующих базовым типам, выглядит следующим образом:

Базовый типТип ссылки
логическое значениеBoolean
байтByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charСимвол

Класс HashMap находится в пакете java.util. Перед использованием его нужно импортировать. Синтаксис выглядит следующим образом:

import java.util.HashMap; // 引入 HashMap 类

В следующем примере мы создаём объект HashMap Sites с ключами Integer и значениями String:

HashMap<Integer, String> Sites = new HashMap<Integer, String>();

Добавление элементов

Класс HashMap предоставляет много полезных методов. Вы можете использовать метод put() для добавления пар ключ-значение:

Пример

// Импорт класса HashMap
import java.util.HashMap;

public class ExampleTest {
    public static void main(String[] args) {
        // Создать объект HashMap Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // Добавить пары ключ-значение
        Sites.put(1, "Google");
        Sites.put(2, "Example");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(Sites);
    }
}

Выполнение приведенного выше кода дает следующий вывод:

{1=Google, 2=Example, 3=Taobao, 4=Zhihu}

В следующем примере создается HashMap с ключами String и значениями String:

Пример

// Импорт класса HashMap
import java.util.HashMap;

public class ExampleTest {
    public static void main(String[] args) {
        // Создать объект HashMap Sites
        HashMap<String, String> Sites = new HashMap<String, String>();
        // Добавить пары ключ-значение
        Sites.put("one", "Google");
        Sites.put("two", "Example");
        Sites.put("three", "Taobao");
        Sites.put("four", "Zhihu");
        System.out.println(Sites);
    }
}

Выполнение приведенного выше кода дает следующий вывод:

{four=Zhihu, one=Google, two=Example, three=Taobao}

Доступ к элементам

Мы можем использовать метод get(key), чтобы получить значение, соответствующее ключу:

Пример

// Импорт класса HashMap
import java.util.HashMap;

public class ExampleTest {
    public static void main(String[] args) {
        // Создать объект HashMap Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // Добавить пары ключ-значение
        Sites.put(1, "Google");
        Sites.put(2, "Example");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(Sites.get(3));
    }
}

Выполнение приведенного выше кода дает следующий вывод:

Taobao

Удаление элементов

Мы можем использовать метод remove(key), чтобы удалить пару ключ-значение, соответствующую ключу:

Пример

// Импорт класса HashMap
import java.util.HashMap;

public class ExampleTest {
    public static void main(String[] args) {
        // Создать объект HashMap Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // Добавить пары ключ-значение
        Sites.put(1, "Google");
        Sites.put(2, "Example");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        Sites.remove(4);
        System.out.println(Sites);
    }
}

Выполнение приведенного выше кода дает следующий вывод:

{1=Google, 2=Example, 3=Taobao}

Чтобы удалить все пары ключ-значение, можно использовать метод clear:

Пример

// Импорт класса HashMap
import java.util.HashMap;

public class ExampleTest {
    public static void main(String[] args) {
        // Создать объект HashMap Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // Добавить пары ключ-значение
        Sites.put(1, "Google");
        Sites.put(2, "Example");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        Sites.clear();
        System.out.println(Sites);
    }
}

Выполнение приведенного выше кода дает следующий вывод:

{}

Вычислить размер

Чтобы вычислить количество элементов в HashMap, можно использовать метод size():

Пример

// Импорт класса HashMap
import java.util.HashMap;

public class ExampleTest {
    public static void main(String[] args) {
        // Создать объект HashMap Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // Добавить пары ключ-значение
        Sites.put(1, "Google");
        Sites.put(2, "Example");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(Sites.size());
    }
}

Выполнение приведенного выше кода дает следующий вывод:

4

Перебор HashMap

Вы можете использовать for-each для перебора элементов в HashMap.

Если вы хотите получить только ключи, можно использовать метод keySet(), а затем получить соответствующее значение через get(key). Если вы хотите получить только значения, можно использовать метод values().

Пример

// Импорт класса HashMap
import java.util.HashMap;

public class ExampleTest {
    public static void main(String[] args) {
        // Создать объект HashMap Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // Добавить пары ключ-значение
        Sites.put(1, "Google");
        Sites.put(2, "Example");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        // Вывод ключа и значения
        for (Integer i : Sites.keySet()) {
            System.out.println("key: " + i + " value: " + Sites.get(i));
        }
        // Вернуть все значения
        for(String value: Sites.values()) {
          // Вывести каждое значение
          System.out.print(value + ", ");
        }
    }
}

Выполнение приведенного выше кода дает следующий вывод:

key: 1 value: Google
key: 2 value: Example
key: 3 value: Taobao
key: 4 value: Zhihu
Google, Example, Taobao, Zhihu,

Методы Java HashMap

hashmap

Список часто используемых методов Java HashMap выглядит следующим образом:

Метод Описание
clear() Удаляет все пары ключ/значение в hashMap
clone() Копирует hashMap
isEmpty() Определяет, пуст ли hashMap
size() Вычисляет количество пар ключ/значение в hashMap
put() Добавляет пары ключ/значение в hashMap
putAll() Добавляет все пары ключ/значение в hashMap
putIfAbsent() Если указанный ключ не существует в hashMap, вставляет указанную пару ключ/значение в hashMap.
remove() Удаляет отображение указанного ключа в hashMap
containsKey() Проверяет, существует ли отображение для указанного ключа в hashMap.
containsValue() Проверяет, существует ли отображение для указанного значения в hashMap.
replace() Заменяет значение, соответствующее указанному ключу в hashMap.
replaceAll() Заменяет все отображения в hashMap результатом выполнения заданной функции.
get() Получает значение, соответствующее указанному ключу
getOrDefault() Получает значение, соответствующее указанному ключу, и возвращает заданное значение по умолчанию, если ключ не найден.
forEach() Выполняет указанную операцию для каждого сопоставления в hashMap.
entrySet() Возвращает представление в виде множества всех сопоставлений в hashMap.
keySet() Возвращает представление в виде множества всех ключей в hashMap.
values() Возвращает все значения, присутствующие в hashMap.
merge() Добавляет пары ключ-значение в hashMap
compute() Пересчитывает значение для указанного ключа в hashMap
computeIfAbsent() Пересчитывает значение для указанного ключа в hashMap и добавляет его в hashMap, если ключ не существует
computeIfPresent() Пересчитывает значение для указанного ключа в hashMap при условии, что ключ существует в hashMap.

Для получения дополнительных методов API см.:https://www.example.com/manual/jdk11api/java.base/java/util/HashMap.html

Java 集合框架Java Collections Framework

Другие расширения