Spec-Zone.ru › OpenJDK 8

Класс HashMap<K,V>

  • java.lang.Object
    • java.util.AbstractMap<K,V>
      • java.util.HashMap<K,V>
Type Parameters:
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, за исключением того, что он не синхронизирован и допускает нулевые значения.) Этот класс не гарантирует порядок элементов карты; в частности, он не гарантирует, что порядок останется постоянным со временем.

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

Экземпляр HashMap имеет два параметра, влияющих на его производительность: начальная емкость и коэффициент заполнения. Емкость — это количество корзин в хеш-таблице, а начальная емкость — это просто емкость в момент создания хеш-таблицы. Коэффициент заполнения — это мера того, насколько полной может стать хеш-таблица, прежде чем ее емкость будет автоматически увеличена. Когда количество элементов в хеш-таблице превышает произведение коэффициента заполнения и текущей емкости, хеш-таблица перехешируется (то есть внутренние структуры данных перестраиваются), так что хеш-таблица имеет примерно в два раза больше корзин.

Как общее правило, стандартный коэффициент заполнения (.75) предлагает хороший компромисс между временем и пространственными затратами. Более высокие значения уменьшают пространственную издержки, но увеличивают затраты на поиск (отражается в большинстве операций класса HashMap, включая get и put). При установке начальной емкости необходимо учитывать ожидаемое количество элементов в карте и её коэффициент заполнения, чтобы свести к минимуму число операций перехеширования. Если начальная емкость больше, чем максимальное число элементов, деленное на коэффициент заполнения, операций перехеширования никогда не произойдёт.

Если в экземпляре HashMap необходимо хранить множество сопоставлений, создание его с достаточной начальной емкостью позволит хранить сопоставления более эффективно, чем позволять ему выполнять автоматическое перехеширование по мере необходимости для увеличения таблицы. Обратите внимание, что использование многих ключей с одинаковым hashCode() — это верный способ замедлить производительность любой хеш-таблицы. Для смягчения последствий, когда ключи являются объектами Comparable, этот класс может использовать порядок сравнения между ключами, чтобы помочь устранить неоднозначности.

Обратите внимание, что эта реализация не синхронизирована. Если к хеш-карте одновременно обращаются несколько потоков, и хотя бы один из потоков изменяет карту структурно, она должна быть синхронизирована внешне. (Структурное изменение — это любая операция, добавляющая или удаляющая одну или несколько пар сопоставлений; простое изменение значения, связанного с ключом, уже присутствующим в экземпляре, не является структурным изменением.) Это обычно достигается путем синхронизации на каком-либо объекте, естественным образом инкапсулирующем карту. Если такого объекта нет, карту следует «обернуть» с помощью метода Collections.synchronizedMap. Это лучше всего сделать при создании, чтобы предотвратить случайный несинхронизированный доступ к карте:

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

Итераторы, возвращаемые всеми «методами представления коллекций» этого класса, являются быстропроверяемыми: если карта структурно изменяется в любой момент после создания итератора, каким-либо способом, кроме метода самого итератора remove, итератор выбросит исключение ConcurrentModificationException. Таким образом, при одновременном изменении итератор быстро и корректно завершает работу, а не рискует произвольным непредсказуемым поведением в неопределенное время в будущем.

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

Этот класс является частью Java Collections Framework.

Since:
1.2
См. также:
Object.hashCode(), Collection, Map, TreeMap, Hashtable, Serialized Form

Вложенные классы

Вложенные классы/интерфейсы, унаследованные от класса java.util.AbstractMap

AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>

Вложенные классы/интерфейсы, унаследованные от интерфейса java.util.Map

Map.Entry<K,V>

Краткое описание конструкторов

Конструктор и описание
HashMap()

Создаёт пустую HashMap с предустановленной начальной ёмкостью (16) и предустановленным коэффициентом заполнения (0.75).

HashMap(int initialCapacity)

Создаёт пустую HashMap с заданной начальной ёмкостью и предустановленным коэффициентом заполнения (0.75).

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 , если эта карта содержит отображение для указанного ключа.

boolean containsValue(Object value)

Возвращает true , если эта карта сопоставляет один или несколько ключей со значением.

Set<Map.Entry<K,V>> entrySet()

Возвращает представление Set отображений, содержащихся в этой карте.

void forEach(BiConsumer<? super K,? super V> action)

Выполняет заданное действие для каждой записи в этой карте, пока все записи не будут обработаны или действие не выбросит исключение.

V get(Object key)

Возвращает значение, которому соответствует указанный ключ, или null , если эта карта не содержит отображения для ключа.

V getOrDefault(Object key, V defaultValue)

Возвращает значение, которому соответствует указанный ключ, или defaultValue , если эта карта не содержит отображения для ключа.

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 putIfAbsent(K key, V value)

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

V remove(Object key)

Удаляет отображение для указанного ключа из этой карты, если оно присутствует.

boolean remove(Object key, Object value)

Удаляет запись для указанного ключа только в том случае, если она в настоящее время сопоставлена ​​с указанным значением.

V replace(K key, V value)

Заменяет запись для указанного ключа только в том случае, если она в настоящее время сопоставлена ​​с каким-либо значением.

boolean replace(K key, V oldValue, V newValue)

Заменяет запись для указанного ключа только в том случае, если она в настоящее время сопоставлена ​​с указанным значением.

void replaceAll(BiFunction<? super K,? super V,? extends V> function)

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

int size()

Возвращает количество отображений ключ-значение в этой карте.

Collection<V> values()

Возвращает представление Collection значений, содержащихся в этой карте.

Методы, унаследованные от класса java.util.AbstractMap

equals, hashCode, toString

Методы, унаследованные от класса java.lang.Object

finalize, getClass, notify, notifyAll, wait, wait, wait

Методы, унаследованные от интерфейса java.util.Map

equals, hashCode

Краткое описание конструкторов

HashMap

public HashMap(int initialCapacity,
               float loadFactor)

Создает пустой HashMap с указанной начальной емкостью и коэффициентом загрузки.

Параметры:
initialCapacity - начальная емкость
loadFactor - коэффициент загрузки
Исключения:
IllegalArgumentException - если начальная емкость отрицательна или коэффициент загрузки неположителен

HashMap

public HashMap(int initialCapacity)

Создает пустой HashMap с указанной начальной емкостью и коэффициентом загрузки по умолчанию (0,75).

Параметры:
initialCapacity - начальная емкость.
Исключения:
IllegalArgumentException - если начальная емкость отрицательна.

HashMap

public HashMap()

Создает пустой HashMap с начальной емкостью по умолчанию (16) и коэффициентом загрузки по умолчанию (0,75).

HashMap

public HashMap(Map<? extends K,? extends V> m)

Создает новый HashMap с теми же сопоставлениями, что и указанный Map. HashMap создается с коэффициентом загрузки по умолчанию (0,75) и начальной емкостью, достаточной для хранения сопоставлений в указанном Map.

Параметры:
m - карта, сопоставления которой должны быть помещены в эту карту
Исключения:
NullPointerException - если указанная карта равна null

Краткое описание методов

size

public int size()

Возвращает количество сопоставлений ключ-значение в этой карте.

Указано в:
size в интерфейсе Map<K,V>
Переопределяет:
size в классе AbstractMap<K,V>
Возвращает:
количество сопоставлений ключ-значение в этой карте

isEmpty

public boolean isEmpty()

Возвращает true если эта карта не содержит сопоставлений ключ-значение.

Указано в:
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 может использоваться для различения этих двух случаев.

Указано в:
get в интерфейсе Map<K,V>
Переопределяет:
get в классе AbstractMap<K,V>
Параметры:
key - ключ, связанное с которым значение должно быть возвращено
Возвращает:
значение, которому сопоставлен указанный ключ, или null если эта карта не содержит сопоставления для ключа
См. также:
put(Object, Object)

containsKey

public boolean containsKey(Object key)

Возвращает true если эта карта содержит сопоставление для указанного ключа.

Указано в:
containsKey в интерфейсе Map<K,V>
Переопределяет:
containsKey в классе AbstractMap<K,V>
Параметры:
key - Ключ, наличие которого в этой карте должно быть проверено
Возвращает:
true если эта карта содержит сопоставление для указанного ключа.

put

public V put(K key,
             V value)

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

Указано в:
put в интерфейсе Map<K,V>
Переопределяет:
put в классе AbstractMap<K,V>
Параметры:
key - ключ, с которым должно быть связано указанное значение
value - значение, которое должно быть связано с указанным ключом
Возвращает:
предыдущее значение, связанное с key, или null если не было сопоставления для key. (Возвращение null также может указывать на то, что карта ранее связывала null с key.)

putAll

public void putAll(Map<? extends K,? extends V> m)

Копирует все сопоставления из указанной карты в эту карту. Эти сопоставления заменят любые сопоставления, которые эта карта имела для любых ключей, в настоящее время имеющихся в указанной карте.

Указано в:
putAll в интерфейсе Map<K,V>
Переопределяет:
putAll в классе AbstractMap<K,V>
Параметры:
m - сопоставления, которые должны быть сохранены в этой карте
Исключения:
NullPointerException - если указанная карта равна null

remove

public V remove(Object key)

Удаляет сопоставление для указанного ключа из этой карты, если оно присутствует.

Указано в:
remove в интерфейсе Map<K,V>
Переопределяет:
remove в классе AbstractMap<K,V>
Параметры:
key - ключ, сопоставление которого должно быть удалено из карты
Возвращает:
предыдущее значение, связанное с key, или null если не было сопоставления для key. (Возвращение null также может указывать на то, что карта ранее связывала null с key.)

clear

public void clear()

Удаляет все сопоставления из этой карты. Карта будет пуста после возврата этого вызова.

Указано в:
clear в интерфейсе Map<K,V>
Переопределяет:
clear в классе AbstractMap<K,V>

containsValue

public boolean containsValue(Object value)

Возвращает true если эта карта сопоставляет один или несколько ключей с указанным значением.

Указано в:
containsValue в интерфейсе Map<K,V>
Переопределяет:
containsValue в классе AbstractMap<K,V>
Параметры:
value - значение, наличие которого в этой карте должно быть проверено
Возвращает:
true если эта карта сопоставляет один или несколько ключей с указанным значением

keySet

public Set<K> keySet()

Возвращает представление Set ключей, содержащихся в этой карте. Множество поддерживается картой, поэтому изменения карты отражаются в множестве и наоборот. Если карта изменяется во время итерации по множеству (кроме операции remove самого итератора), результаты итерации не определены. Множество поддерживает удаление элементов, которое удаляет соответствующее сопоставление из карты, с помощью операций Iterator.remove, Set.remove, removeAll, retainAll и clear. Оно не поддерживает операции add или addAll.

Указано в:
keySet в интерфейсе Map<K,V>
Переопределяет:
keySet в классе AbstractMap<K,V>
Возвращает:
представление множества ключей, содержащихся в этой карте

values

public Collection<V> values()

Возвращает представление Collection значений, содержащихся в этой карте. Коллекция поддерживается картой, поэтому изменения карты отражаются в коллекции и наоборот. Если карта изменяется во время итерации по коллекции (кроме операции remove самого итератора), результаты итерации не определены. Коллекция поддерживает удаление элементов, которое удаляет соответствующее сопоставление из карты, с помощью операций Iterator.remove, Collection.remove, removeAll, retainAll и clear. Она не поддерживает операции add или addAll.

Указано в:
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.

Указано в:
entrySet в интерфейсе Map<K,V>
Указано в:
entrySet в классе AbstractMap<K,V>
Возвращает:
представление множества сопоставлений, содержащихся в этой карте

getOrDefault

public V getOrDefault(Object key,
                      V defaultValue)

Описание скопировано из интерфейса: Map

Возвращает значение, которому сопоставлен указанный ключ, или defaultValue если эта карта не содержит сопоставления для ключа.

Определено в:
getOrDefault в интерфейсе Map<K,V>
Параметры:
key - ключ, связанное значение которого требуется вернуть
defaultValue - значение по умолчанию для ключа
Возвращает:
значение, которому сопоставлен указанный ключ, или defaultValue, если в этой карте нет сопоставления для ключа

putIfAbsent

public V putIfAbsent(K key,
                     V value)

Описание скопировано из интерфейса: Map

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

Определено в:
putIfAbsent в интерфейсе Map<K,V>
Параметры:
key - ключ, которому должно быть сопоставлено указанное значение
value - значение, которое должно быть сопоставлено указанному ключу
Возвращает:
предыдущее значение, связанное с указанным ключом, или null, если для ключа не было сопоставления. (Возвращение null также может указывать, что карта ранее связывала null с ключом, если реализация поддерживает нулевые значения.)

remove

public boolean remove(Object key,
                      Object value)

Описание скопировано из интерфейса: Map

Удаляет запись для указанного ключа только в том случае, если она в настоящее время сопоставлена ​​с указанным значением.

Определено в:
remove в интерфейсе Map<K,V>
Параметры:
key - ключ, которому должно быть сопоставлено указанное значение
value - ожидаемое значение, связанное с указанным ключом
Возвращает:
true если значение было удалено

replace

public boolean replace(K key,
                       V oldValue,
                       V newValue)

Описание скопировано из интерфейса: Map

Заменяет запись для указанного ключа только в том случае, если она в настоящее время сопоставлена ​​с указанным значением.

Определено в:
replace в интерфейсе Map<K,V>
Параметры:
key - ключ, которому должно быть сопоставлено указанное значение
oldValue - ожидаемое значение, связанное с указанным ключом
newValue - значение, которое должно быть сопоставлено указанному ключу
Возвращает:
true если значение было заменено

replace

public V replace(K key,
                 V value)

Описание скопировано из интерфейса: Map

Заменяет запись для указанного ключа только в том случае, если она в настоящее время сопоставлена ​​с каким-либо значением.

Определено в:
replace в интерфейсе Map<K,V>
Параметры:
key - ключ, которому должно быть сопоставлено указанное значение
value - значение, которое должно быть сопоставлено указанному ключу
Возвращает:
предыдущее значение, связанное с указанным ключом, или null, если для ключа не было сопоставления. (Возвращение null также может указывать, что карта ранее связывала null с ключом, если реализация поддерживает нулевые значения.)

computeIfAbsent

public V computeIfAbsent(K key,
                         Function<? super K,? extends V> mappingFunction)

Описание скопировано из интерфейса: Map

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

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

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

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

map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);
Определено в:
computeIfAbsent в интерфейсе Map<K,V>
Параметры:
key - ключ, которому должно быть сопоставлено указанное значение
mappingFunction - функция для вычисления значения
Возвращает:
текущее (существующее или вычисленное) значение, связанное с указанным ключом, или null, если вычисленное значение равно null

computeIfPresent

public V computeIfPresent(K key,
                          BiFunction<? super K,? super V,? extends V> remappingFunction)

Описание скопировано из интерфейса: Map

Если значение для указанного ключа присутствует и не равно null, пытается вычислить новое сопоставление, заданное ключом и его текущим сопоставленным значением.

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

Определено в:
computeIfPresent в интерфейсе Map<K,V>
Параметры:
key - ключ, которому должно быть сопоставлено указанное значение
remappingFunction - функция для вычисления значения
Возвращает:
новое значение, связанное с указанным ключом, или null, если нет

compute

public V compute(K key,
                 BiFunction<? super K,? super V,? extends V> remappingFunction)

Описание скопировано из интерфейса: Map

Пытается вычислить сопоставление для указанного ключа и его текущего сопоставленного значения (или null, если текущего сопоставления нет). Например, для создания или добавления String msg к сопоставленному значению:

map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
(Метод merge() часто проще использовать для таких целей.)

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

Определено в:
compute в интерфейсе Map<K,V>
Параметры:
key - ключ, которому должно быть сопоставлено указанное значение
remappingFunction - функция для вычисления значения
Возвращает:
новое значение, связанное с указанным ключом, или null, если нет

merge

public V merge(K key,
               V value,
               BiFunction<? super V,? super V,? extends V> remappingFunction)

Описание скопировано из интерфейса: Map

Если указанный ключ еще не связан со значением или связан с null, связывает его с заданным ненулевым значением. В противном случае заменяет связанное значение результатом заданной функции перерасчета или удаляет, если результат равен null. Этот метод может быть полезен при объединении нескольких сопоставленных значений для ключа. Например, для создания или добавления String msg к сопоставленному значению:

map.merge(key, msg, String::concat)

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

Определено в:
merge в интерфейсе Map<K,V>
Параметры:
key - ключ, которому должно быть сопоставлено результирующее значение
value - ненулевое значение, которое будет объединено с существующим значением, связанным с ключом, или, если существующего значения или значения null не связано с ключом, которое будет связано с ключом
remappingFunction - функция для повторного вычисления значения, если оно присутствует
Возвращает:
новое значение, связанное с указанным ключом, или null, если со значением ключу не связано

forEach

public void forEach(BiConsumer<? super K,? super V> action)

Описание скопировано из интерфейса: Map

Выполняет заданное действие для каждой записи в этой карте до тех пор, пока все записи не будут обработаны или действие не вызовет исключение. За исключением случаев, когда это оговорено реализующим классом, действия выполняются в порядке итерации набора записей (если порядок итерации указан). Исключения, вызванные действием, передаются вызывающей стороне.

Определено в:
forEach в интерфейсе Map<K,V>
Параметры:
action - действие, которое должно выполняться для каждой записи

replaceAll

public void replaceAll(BiFunction<? super K,? super V,? extends V> function)

Описание скопировано из интерфейса: Map

Заменяет значение каждой записи результатом вызова заданной функции для этой записи, до тех пор, пока все записи не будут обработаны или функция не вызовет исключение. Исключения, вызванные функцией, передаются вызывающей стороне.

Определено в:
replaceAll в интерфейсе Map<K,V>
Параметры:
function - функция, применяемая к каждой записи

clone

public Object clone()

Возвращает поверхностную копию этого HashMap экземпляра: ключи и значения сами не клонируются.

Переопределяет:
clone в классе AbstractMap<K,V>
Возвращает:
поверхностную копию этой карты
См. также:
Cloneable

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API