模块  java.base
Пакет java.util

Класс HashMap<K,​V>

  • Параметры типа
    K- тип ключей, которые хранит это отображение
    V- тип значений отображения. Все реализованные интерфейсы
    Serializable , Cloneable , Map<K,​V>
    Известные прямые подклассы:
    LinkedHashMap , PrinterStateReasons

    public class HashMap<K,​V>
    extends AbstractMap<K,​V>
    implements Map<K,​V>, Cloneable, Serializable
    Реализация интерфейса на основе хеш-таблицы. Эта реализация предоставляет все необязательные операции отображения и допускаетMap接口的实现。 此实现提供了所有可选的映射操作,并允许nullЗначения иnullключи. (HashMapкласс примерно эквивалентенHashtable, но он не синхронизирован и допускает значения null.) Этот класс не гарантирует порядок элементов в карте. В частности, он не гарантирует, что порядок останется неизменным со временем. Эта реализация обеспечивает постоянное время выполнения для базовых операций (

    get和put), если хеш-функция правильно распределяет элементы по сегментам. Итерация по представлениям коллекции требует времени, пропорциональногоHashMap«ёмкости» экземпляра (числу сегментов) плюс его размеру (числу отображений ключ-значение). Поэтому, если важна производительность итерации, не устанавливайте слишком высокую начальную ёмкость (или слишком низкий коэффициент загрузки).

    HashMapЭкземпляры

    作为一般规则,默认加载因子(.75)在时间和空间成本之间提供了良好的折衷。 较高的值会减少空间开销,但会增加查找成本(反映在HashMap类的大多数操作中,包括get和putи

    如果要将多个映射存储在HashMapЕсли нужно хранить много отображений вhashCode()экземпляре, создание карты с достаточно большой ёмкостью позволит хранить её эффективнее, чем автоматическое рехеширование таблицы по мере необходимости. Обратите внимание, что использование многих ключей с одинаковымComparable— надёжный способ замедлить работу любой хеш-таблицы. Чтобы улучшить ситуацию, когда ключи

    , этот класс может использовать порядок сравнения ключей для разрешения коллизий.Collections.synchronizedMapМетод «оборачивает» карту. Лучше делать это при создании. Это предотвращает случайный несинхронизированный доступ к карте.

      Map m = Collections.synchronizedMap(new HashMap(...)); 

    метод «обёртывания» карты. Лучше делать это в момент создания, чтобы предотвратить случайный несинхронизированный доступ к карте:remove方法之外,迭代器将抛出ConcurrentModificationExceptionитератора, итератор выбрасывает

    . Поэтому при конкурентной модификации итератор быстро и корректно завершается с ошибкой, вместо того чтобы рисковать произвольным недетерминированным поведением в неопределённый момент в будущем.ConcurrentModificationExceptionОбратите внимание, что fail-fast поведение итератора не гарантируется, поскольку в общем случае при наличии несинхронизированных конкурентных модификаций невозможно дать никаких жёстких гарантий. Fail-fast итераторы выбрасывают

    на основе принципа максимальных усилий. Поэтому неправильно писать программу, полагаясь на это исключение для обеспечения корректности: fail-fast поведение итератора следует использовать только для обнаружения ошибок.

    Этот класс является членом Java Collections Framework.
    Object.hashCode()Начиная с версии: 1.2 См. также:Collection,Map,TreeMap,Hashtable, Serialized Form
    • 构造方法摘要

      Конструктор Описание
      HashMap()
      Создаёт пустуюHashMap 。
      HashMap​(int initialCapacity)
      Создаёт пустуюHashMap 。
      HashMap​(int initialCapacity, float loadFactor)
      Создаёт пустуюHashMap 。
      HashMap​(Map<? extends K,​? extends V> m)
      Создайте новыйHashMap и его сопоставление с указанным MapОдинаково.
    • 方法摘要

      Все методы, методы экземпляра, конкретные методы, переменные и типы, методы, описание
      void clear()
      Удаляет все сопоставления из этой карты.
      Object clone()
      Возвращает этоHashMapПоверхностная копия экземпляра: сами ключи и значения не клонируются.
      V compute​(K key, BiFunction<? super K,​? super V,​? extends V> remappingFunction)
      Пытается вычислить отображение для указанного ключа и его текущего значения (если текущего значения нет,null )。
      V computeIfAbsent​(K key, Function<? super K,​? extends V> mappingFunction)
      Если указанный ключ ещё не связан со значением (или сопоставленnull ), то попытайтесь вычислить её значение с помощью заданной функции отображения и внести его в это отображение, если только null 。
      V computeIfPresent​(K key, BiFunction<? super K,​? super V,​? extends V> remappingFunction)
      Если значение по указанному ключу существует и не равно null, вычисляется новое отображение для данного ключа с учётом его текущего значения.
      boolean containsKey​(Object key)
      Если данное отображение содержит отображение для указанного ключа, возвращает true.true 。
      boolean containsValue​(Object value)
      Возвращает true, если данное сопоставление содержит один или несколько ключей, сопоставленных с указанным значением.true 。
      Set<Map.Entry<K,​V>> entrySet()
      Возвращает набор отображений, содержащихся в этой карте.SetВид.
      V get​(Object key)
      Возвращает значение, сопоставленное с указанным ключом, или null, если сопоставление для этого ключа отсутствует.null 。
      boolean isEmpty()
      Если это сопоставление не содержит сопоставления «ключ — значение», возвращаетсяtrue 。
      Set<K> keySet()
      Возвращает ключи, содержащиеся в этом отображении.SetВид.
      V merge​(K key, V value, BiFunction<? super V,​? super V,​? extends V> remappingFunction)
      Если указанный ключ ещё не связан со значением или связан с null, он связывается с заданным ненулевым значением.
      V put​(K key, V value)
      Связывает указанное значение с указанным ключом в этой карте.
      void putAll​(Map<? extends K,​? extends V> m)
      Копирует все сопоставления из указанного отображения в это отображение.
      V remove​(Object key)
      Удаляет из этой карты сопоставление с указанным ключом, если оно существует.
      int size()
      Возвращает количество сопоставлений «ключ — значение» в этой карте.
      Collection<V> values()
      Возвращает коллекцию значений, содержащихся в этом отображении.CollectionВид.
    • 构造方法详细信息

      • HashMap

        public HashMap​(int initialCapacity,
                       float loadFactor)
        Создаёт пустую карту с указанной начальной ёмкостью и коэффициентом загрузки.HashMap 。
        Параметры
        initialCapacity- начальная емкость
        loadFactor- коэффициент загрузки Исключения
        IllegalArgumentException- если начальная емкость отрицательна или коэффициент загрузки неположителен
      • HashMap

        public HashMap​(int initialCapacity)
        Конструирует пустой объект с указанной начальной емкостью и коэффициентом загрузки по умолчанию (0.75)HashMap 。
        Параметры
        initialCapacity- начальная емкость. Исключения
        IllegalArgumentException- если начальная емкость отрицательна.
      • HashMap

        public HashMap()
        Конструирует пустой объект с начальной емкостью по умолчанию (16) и коэффициентом загрузки по умолчанию (0.75)HashMap 。
      • HashMap

        public HashMap​(Map<? extends K,​? extends V> m)
        Конструирует новый объектHashMap с отображениями, такими же, как у указанногоMapобъекта.HashMapПри создании используется коэффициент загрузки по умолчанию (0.75) и начальная емкость, достаточная для хранения указанныхMapотображений.
        Параметры
        m - mотображения, которые помещаются в это отображение Исключения
        NullPointerException- если указанное отображение равно null
    • 方法详细信息

      • size

        public int size()
        Возвращает количество пар «ключ - значение» в этом отображении.
        Specified by:
        size在界面 Map<K,​V>
        Переопределяет:
        size类 AbstractMap<K,​V>
        Результат: количество пар «ключ - значение» в этом отображении
      • isEmpty

        public boolean isEmpty()
        Возвращает значение, если это отображение не содержит пар «ключ - значение»true 。
        Specified by:
        isEmpty在界面 Map<K,​V>
        Переопределяет:
        isEmpty类 AbstractMap<K,​V>
        Результат
        trueЕсли это отображение не содержит сопоставления ключ - значение
      • get

        public V get​(Object key)
        Возвращает значение, сопоставленное с указанным ключом, илиnull, если это отображение не содержит сопоставления для ключа. Более формально, если это отображение содержит сопоставление

        k到值vк значению(key==null ? k==null : key.equals(k)) такое, чтоv, этот метод возвращаетnull; иначе возвращает

        . (Может быть не более одного такого сопоставления.)nullВозвращаемое значениеnullне обязательно означает, что отображение не содержит сопоставления для ключа. Отображение также может явно сопоставлять ключ со значениемcontainsKey. Различить эти два случая позволяет операция

        Specified by:
        get在界面 Map<K,​V>
        Переопределяет:
        get类 AbstractMap<K,​V>
        Параметры
        key- ключ, сопоставленное значение которого нужно вернуть. Возвращает значение, сопоставленное с указанным ключом, или
        null
        См. также:
        put(Object, Object)
      • containsKey

        public boolean containsKey​(Object key)
        Возвращаетtrue 。
        Specified by:
        containsKey在界面 Map<K,​V>
        Переопределяет:
        containsKey在类 AbstractMap<K,​V>
        Параметры
        key- ключ, наличие которого в этом отображении нужно проверить. Возвращает
        true, если это отображение содержит сопоставление для указанного ключа.
      • put

        public V put​(K key,
                     V value)
        Сопоставляет указанное значение с указанным ключом в этом отображении. Если отображение ранее содержало сопоставление для ключа, старое значение заменяется.
        Specified by:
        put在界面 Map<K,​V>
        Переопределяет:
        put在课堂上 AbstractMap<K,​V>
        Параметры
        key- ключ, сопоставляемый с указанным значением
        value- значение, сопоставляемое с указанным ключом. Возвращает предыдущее значение, сопоставленное с
        key , илиnullЕсли отображение отсутствуетkey. (Anullвозврат также может означать, что ранее с этим отображением было связаноnull与key).
      • putAll

        public void putAll​(Map<? extends K,​? extends V> m)
        Копирует все отображения из указанной карты в эту карту. Эти отображения заменяют любые отображения этой карты для ключей, которые сейчас есть в указанной карте.
        Specified by:
        putAll在界面 Map<K,​V>
        Переопределяет:
        putAll在类 AbstractMap<K,​V>
        Параметры
        m- отображения, которые нужно сохранить в этой карте. Исключения
        NullPointerException- если указанная карта равна null
      • remove

        public V remove​(Object key)
        Удаляет отображение для указанного ключа из этой карты, если оно существует.
        Specified by:
        remove在界面 Map<K,​V>
        Переопределяет:
        remove在类 AbstractMap<K,​V>
        Параметры
        key- ключ, отображение которого нужно удалить из карты. Результат Если отображения нет, то
        keyвозвращаетсяkeyили nullпредыдущее значение, связанное с ключом. (Anullвозврат также может означать, что ранее с этим отображением было связаноnull与key).
      • clear

        public void clear()
        Удаляет все отображения из этой карты. После возврата из этого вызова карта будет пустой.
        Specified by:
        clear在界面 Map<K,​V>
        Переопределяет:
        clearв классе AbstractMap<K,​V>
      • containsValue

        public boolean containsValue​(Object value)
        Возвращаетtrue 。
        Specified by:
        containsValue在界面 Map<K,​V>
        Переопределяет:
        containsValue类 AbstractMap<K,​V>
        Параметры
        value- значение, наличие которого проверяется в этой карте Результат
        truetrue, если эта карта сопоставляет один или несколько ключей с указанным значением
      • keySet

        public Set<K> keySet()
        Возвращает представление ключей, содержащихсяSetв этой карте. Набор поддерживается картой, поэтому изменения в карте отражаются в наборе, и наоборот. Если карта изменяется во время итерации по набору (кроме как через собственныйremoveметод итератора), результат итерации не определен. Набор поддерживает удаление элементов, то есть удаление соответствующего сопоставления из карты, черезIterator.remove , Set.remove , removeAll , retainAll иclearметоды. Он не поддерживаетaddили addAll操作。
        Specified by:
        keySet在界面 Map<K,​V>
        Переопределяет:
        keySet在类 AbstractMap<K,​V>
        Результат представление набора ключей, содержащихся в этой карте
      • values

        public Collection<V> values()
        Возвращает представление значений, содержащихсяCollectionв этой карте. Коллекция поддерживается картой, поэтому изменения в карте отражаются в коллекции, и наоборот. Если карта изменяется во время итерации по коллекции (кроме как через собственныйremoveметод итератора), результат итерации не определен. Коллекция поддерживает удаление элементов, то есть удаление соответствующего сопоставления из карты, черезIterator.remove , Collection.remove , removeAll , retainAll和clearметоды. Она не поддерживаетaddили addAll操作。
        Specified by:
        values在界面 Map<K,​V>
        Переопределяет:
        values在课堂上 AbstractMap<K,​V>
        Результат представление значений, содержащихся в этой карте
      • entrySet

        public Set<Map.Entry<K,​V>> entrySet()
        Возвращает представление сопоставлений, содержащихсяSetв этой карте. Набор поддерживается картой, поэтому изменения в карте отражаются в наборе, и наоборот. Если карта изменяется во время итерации по набору (кроме как через собственныйremoveметод итератора или через метод на записи сопоставления, возвращенной итератором,setValue…операции), результат итерации не определён. Эта коллекция поддерживает удаление элементов, то есть удаление соответствующей записи из отображения через…Iterator.remove , Set.remove , removeAll , retainAll和clearоперации. Она не поддерживаетaddили addAll操作。
        Specified by:
        entrySet在界面 Map<K,​V>
        Результат: представление set отображений, содержащихся в этом отображении
      • computeIfAbsent

        public V computeIfAbsent​(K key,
                                 Function<? super K,​? extends V> mappingFunction)
        Если указанный ключ ещё не связан со значением (или отображается вnull ), программа пытается вычислить его значение с помощью заданной функции отображения и вводит его в это отображение, если толькоnull. Если функция отображения возвращает

        null, отображение не записывается. Если функция отображения сама выбрасывает (непроверяемое) исключение, исключение выбрасывается повторно, и отображение не записывается. Наиболее распространённое применение — создание нового объекта, используемого как начальное значение отображения или запомненный результат, например:

           map.computeIfAbsent(key, k -> new Value(f(k)));  

        Или реализация многозначного отображенияMap<K,Collection<V>>, где каждый ключ поддерживает несколько значений:

           map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);  

        Функция отображения не должна изменять это отображение во время вычисления.

        Если обнаружено, что функция отображения изменила это отображение во время вычисления, метод по мере возможностей выброситConcurrentModificationException.

        Specified by:
        computeIfAbsent在界面 Map<K,​V>
        Параметры
        key- ключ, связанный с указанным значением
        mappingFunction- функция отображения для вычисления значения Результат: текущее (существующее или вычисленное) значение, связанное с указанным ключом, или null, если вычисленное значение равно null Исключения
        ConcurrentModificationException- если обнаружено, что функция отображения изменила это отображение
      • computeIfPresent

        public V computeIfPresent​(K key,
                                  BiFunction<? super K,​? super V,​? extends V> remappingFunction)
        Если значение для указанного ключа существует и не равно null, программа пытается вычислить новое отображение с учётом ключа и его текущего значения отображения. Если функция повторного отображения возвращает

        null, отображение удаляется. Если функция повторного отображения сама выбрасывает (непроверяемое) исключение, исключение выбрасывается повторно, и текущее отображение остаётся без изменений.

        Функция повторного отображения не должна изменять это отображение во время вычисления.

        Если обнаружено, что функция повторного отображения изменила это отображение во время вычисления, метод по мере возможностей выброситConcurrentModificationException.

        Specified by:
        computeIfPresent在界面 Map<K,​V>
        Параметры
        key- ключ, связанный с указанным значением
        remappingFunction- функция повторного отображения для вычисления значения Результат: новое значение, связанное с указанным ключом, или null, если его нет Исключения
        ConcurrentModificationException- если обнаружено, что функция повторного отображения изменила это отображение
      • compute

        public V compute​(K key,
                         BiFunction<? super K,​? super V,​? extends V> remappingFunction)
        Пытается вычислить отображение для указанного ключа и его текущего отображённого значения (если текущего значения нет,null). Например, чтобы создать или добавитьStringсообщение к отображению значений:
           map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg)) 
        (Методmerge()обычно удобнее для таких целей.) Если функция повторного отображения возвращает

        null, отображение удаляется (или остаётся отсутствующим, если его изначально не было). Если функция повторного отображения сама выбрасывает (непроверяемое) исключение, исключение выбрасывается повторно, а текущее отображение остаётся без изменений.

        Функция повторного отображения не должна изменять это отображение во время вычисления.

        Если обнаружено, что функция повторного отображения изменила это отображение во время вычисления, метод по мере возможностей выброситConcurrentModificationException.

        Specified by:
        compute在界面 Map<K,​V>
        Параметры
        key- ключ, связанный с указанным значением
        remappingFunction- функция повторного отображения для вычисления значения Результат новое значение, связанное с указанным ключом, или null, если его нет Исключения
        ConcurrentModificationException- если обнаружено, что функция повторного отображения изменила это отображение
      • merge

        public V merge​(K key,
                       V value,
                       BiFunction<? super V,​? super V,​? extends V> remappingFunction)
        Если указанный ключ ещё не связан со значением или связан с null, он связывается с данным непустым значением. Иначе связанное значение заменяется результатом данной функции повторного отображения, а если результатnull, оно удаляется. Этот метод полезен при объединении нескольких отображённых значений для ключа. Например, чтобы создать или добавитьString msgк отображению значений:
           map.merge(key, msg, String::concat)  

        Если функция повторного отображения возвращаетnull, отображение удаляется. Если функция повторного отображения сама выбрасывает (непроверяемое) исключение, исключение выбрасывается повторно, а текущее отображение остаётся без изменений.

        Функция повторного отображения не должна изменять это отображение во время вычисления.

        Если обнаружено, что функция повторного отображения изменила это отображение во время вычисления, метод по мере возможностей выброситConcurrentModificationException.

        Specified by:
        merge在界面 Map<K,​V>
        Параметры
        key- ключ, связанный с результирующим значением
        value- непустое значение для объединения с существующим значением, связанным с ключом, или значение для связи с ключом, если существующего значения нет или оно равно null
        remappingFunction- функция повторного отображения для пересчёта значения, если оно существует Результат новое значение, связанное с указанным ключом, или null, если с ключом не связано ни одного значения Исключения
        ConcurrentModificationException- если обнаружено, что функция повторного отображения изменила это отображение
      • clone

        public Object clone()
        Возвращает поверхностную копию этогоHashMapэкземпляра: сами ключи и значения не клонируются.
        Переопределяет:
        clone类 AbstractMap<K,​V>
        Результат поверхностная копия этого отображения См. также:
        Cloneable