- java.lang.Object
- java.util.AbstractMap <K,V>
- 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
-
-
嵌套类汇总
-
嵌套类/接口声明在类 java.util.AbstractMap
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
-
-
方法摘要
Все методы, методы экземпляра, конкретные методы, переменные и типы, методы, описание voidclear()Удаляет все сопоставления из этой карты.Objectclone()Возвращает этоHashMapПоверхностная копия экземпляра: сами ключи и значения не клонируются.Vcompute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)Пытается вычислить отображение для указанного ключа и его текущего значения (если текущего значения нет,null)。VcomputeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)Если указанный ключ ещё не связан со значением (или сопоставленnull), то попытайтесь вычислить её значение с помощью заданной функции отображения и внести его в это отображение, если толькоnull。VcomputeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)Если значение по указанному ключу существует и не равно null, вычисляется новое отображение для данного ключа с учётом его текущего значения.booleancontainsKey(Object key)Если данное отображение содержит отображение для указанного ключа, возвращает true.true。booleancontainsValue(Object value)Возвращает true, если данное сопоставление содержит один или несколько ключей, сопоставленных с указанным значением.true。Set<Map.Entry<K,V>>entrySet()Возвращает набор отображений, содержащихся в этой карте.SetВид.Vget(Object key)Возвращает значение, сопоставленное с указанным ключом, или null, если сопоставление для этого ключа отсутствует.null。booleanisEmpty()Если это сопоставление не содержит сопоставления «ключ — значение», возвращаетсяtrue。Set<K>keySet()Возвращает ключи, содержащиеся в этом отображении.SetВид.Vmerge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)Если указанный ключ ещё не связан со значением или связан с null, он связывается с заданным ненулевым значением.Vput(K key, V value)Связывает указанное значение с указанным ключом в этой карте.voidputAll(Map<? extends K,? extends V> m)Копирует все сопоставления из указанного отображения в это отображение.Vremove(Object key)Удаляет из этой карты сопоставление с указанным ключом, если оно существует.intsize()Возвращает количество сопоставлений «ключ — значение» в этой карте.Collection<V>values()Возвращает коллекцию значений, содержащихся в этом отображении.CollectionВид.-
声明方法的类 java.util.AbstractMap
equals, hashCode, toString
-
声明方法的接口 java.util.Map
equals, forEach, getOrDefault, hashCode, putIfAbsent, remove, replace, replace, replaceAll
-
-
-
-
构造方法详细信息
-
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()
Возвращает количество пар «ключ - значение» в этом отображении.
-
isEmpty
public boolean isEmpty()
Возвращает значение, если это отображение не содержит пар «ключ - значение»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()
Удаляет все отображения из этой карты. После возврата из этого вызова карта будет пустой.
-
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操作。
-
values
public Collection<V> values()
Возвращает представление значений, содержащихсяCollectionв этой карте. Коллекция поддерживается картой, поэтому изменения в карте отражаются в коллекции, и наоборот. Если карта изменяется во время итерации по коллекции (кроме как через собственныйremoveметод итератора), результат итерации не определен. Коллекция поддерживает удаление элементов, то есть удаление соответствующего сопоставления из карты, черезIterator.remove,Collection.remove,removeAll,retainAll和clearметоды. Она не поддерживаетaddилиaddAll操作。
-
entrySet
public Set<Map.Entry<K,V>> entrySet()
Возвращает представление сопоставлений, содержащихсяSetв этой карте. Набор поддерживается картой, поэтому изменения в карте отражаются в наборе, и наоборот. Если карта изменяется во время итерации по набору (кроме как через собственныйremoveметод итератора или через метод на записи сопоставления, возвращенной итератором,setValue…операции), результат итерации не определён. Эта коллекция поддерживает удаление элементов, то есть удаление соответствующей записи из отображения через…Iterator.remove,Set.remove,removeAll,retainAll和clearоперации. Она не поддерживаетaddилиaddAll操作。
-
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- непустое значение для объединения с существующим значением, связанным с ключом, или значение для связи с ключом, если существующего значения нет или оно равно nullremappingFunction- функция повторного отображения для пересчёта значения, если оно существует Результат новое значение, связанное с указанным ключом, или null, если с ключом не связано ни одного значения ИсключенияConcurrentModificationException- если обнаружено, что функция повторного отображения изменила это отображение
-
-