Класс Hashtable<K, V>
- Параметры типа:
K— тип ключей, хранящихся в этой картеV— тип сопоставленных значений
- Все реализуемые интерфейсы:
Serializable, Cloneable, Map<K,V>
- Прямые известные подклассы:
Properties, UIDefaults
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable
null, можно использовать в качестве ключа или значения. Чтобы успешно сохранять объекты в хеш-таблице и получать их из неё, объекты, используемые в качестве ключей, должны реализовывать методы hashCode и equals.
Экземпляр Hashtable имеет два параметра, влияющих на его производительность: начальная ёмкость и коэффициент загрузки. Ёмкость — это число корзин в хеш-таблице, а начальная ёмкость — это ёмкость таблицы при её создании. Обратите внимание, что хеш-таблица является открытой: в случае «коллизии хеширования» одна корзина хранит несколько записей, которые необходимо искать последовательно. Коэффициент загрузки определяет, насколько может заполниться хеш-таблица, прежде чем её ёмкость будет автоматически увеличена. Параметры начальной ёмкости и коэффициента загрузки служат лишь подсказками для реализации. Точные условия, при которых вызывается метод rehash, зависят от реализации.
Как правило, значение коэффициента загрузки по умолчанию (0,75) обеспечивает хороший компромисс между затратами времени и памяти. Более высокие значения сокращают накладные расходы на память, но увеличивают время поиска записи (что отражается на большинстве операций Hashtable, включая get и put).
Начальная ёмкость позволяет найти компромисс между неиспользуемой памятью и необходимостью выполнять операции rehash, требующие значительного времени. Операции rehash никогда не будут выполняться, если начальная ёмкость превышает максимальное число записей, которое будет содержать Hashtable, делённое на коэффициент загрузки. Однако слишком большое значение начальной ёмкости может привести к излишнему расходу памяти.
Если в Hashtable планируется добавить много записей, создание таблицы с достаточно большой ёмкостью может обеспечить более эффективную вставку записей, чем автоматическое изменение размера таблицы по мере необходимости.
В этом примере создаётся хеш-таблица чисел. В качестве ключей используются названия чисел:
Hashtable<String, Integer> numbers
= new Hashtable<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3); Чтобы получить число, используйте следующий код:
Integer n = numbers.get("two");
if (n != null) {
System.out.println("two = " + n);
} Итераторы, возвращаемые методом iterator коллекций, полученных с помощью всех «методов представления коллекций» этого класса, являются fail-fast: если после создания итератора структура Hashtable каким-либо образом изменится, кроме как в результате вызова собственного метода remove этого итератора, итератор выбросит исключение ConcurrentModificationException. Таким образом, при одновременной модификации итератор быстро и корректно завершает работу, не допуская произвольного и недетерминированного поведения в неопределённый момент в будущем. Перечисления, возвращаемые методами Hashtable keys и elements, не являются fail-fast; если после создания перечисления структура Hashtable изменится, результаты перечисления будут неопределёнными.
Обратите внимание, что гарантировать поведение fail-fast итератора невозможно, поскольку в целом невозможно дать какие-либо строгие гарантии при несинхронизированной одновременной модификации. Итераторы fail-fast выбрасывают ConcurrentModificationException по возможности. Поэтому неправильно писать программу, корректность которой зависит от этого исключения: поведение итераторов fail-fast следует использовать только для обнаружения ошибок.
Начиная с платформы Java 2 версии 1.2, этот класс был адаптирован для реализации интерфейса Map, благодаря чему он стал частью Java Collections Framework. В отличие от новых реализаций коллекций, Hashtable синхронизирован. Если потокобезопасная реализация не требуется, рекомендуется использовать HashMap вместо Hashtable. Если требуется высокопроизводительная потокобезопасная реализация, рекомендуется использовать ConcurrentHashMap вместо Hashtable.
- С версии:
- 1.0
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Hashtable() |
Создаёт новую пустую хеш-таблицу с начальной ёмкостью по умолчанию (11) и коэффициентом загрузки (0,75). |
Hashtable |
Создаёт новую пустую хеш-таблицу с указанной начальной ёмкостью и коэффициентом загрузки по умолчанию (0,75). |
Hashtable |
Создаёт новую пустую хеш-таблицу с указанными начальной ёмкостью и коэффициентом загрузки. |
Hashtable |
Создаёт новую хеш-таблицу с теми же соответствиями, что и заданная карта. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
clear() |
Очищает эту хеш-таблицу, удаляя все ключи. |
Object |
clone() |
Создаёт поверхностную копию этой хеш-таблицы. |
V |
compute |
Пытается вычислить соответствие для указанного ключа и его текущего сопоставленного значения или null, если текущего соответствия нет (необязательная операция). |
V |
computeIfAbsent |
Если указанному ключу ещё не сопоставлено значение (или ему сопоставлено null), пытается вычислить его значение с помощью заданной функции сопоставления и добавляет его в эту карту, если результат не равен null (необязательная операция). |
V |
computeIfPresent |
Если для указанного ключа имеется ненулевое значение, пытается вычислить новое соответствие на основе ключа и текущего сопоставленного ему значения (необязательная операция). |
boolean |
contains |
Проверяет, сопоставлен ли какой-либо ключ указанному значению в этой хеш-таблице. |
boolean |
containsKey |
Проверяет, является ли указанный объект ключом в этой хеш-таблице. |
boolean |
containsValue |
Возвращает true, если эта хеш-таблица сопоставляет одно или несколько ключей этому значению. |
Enumeration |
elements() |
Возвращает перечисление значений в этой хеш-таблице. |
Set |
entrySet() |
Возвращает представление соответствий, содержащихся в этой карте, в виде Set. |
boolean |
equals |
Сравнивает указанный объект с этой картой на равенство согласно определению интерфейса Map. |
V |
get |
Возвращает значение, сопоставленное указанному ключу, или null, если в этой карте нет соответствия для данного ключа. |
int |
hashCode() |
Возвращает хеш-код этой карты согласно определению интерфейса Map. |
boolean |
isEmpty() |
Проверяет, не сопоставлены ли в этой хеш-таблице значениям какие-либо ключи. |
Enumeration |
keys() |
Возвращает перечисление ключей этой хеш-таблицы. |
Set |
keySet() |
Возвращает представление ключей, содержащихся в этой карте, в виде Set. |
V |
merge |
Если указанному ключу ещё не сопоставлено значение или ему сопоставлено null, сопоставляет ему заданное ненулевое значение (необязательная операция). |
V |
put |
Сопоставляет указанный key с указанным value в этой хеш-таблице. |
void |
putAll |
Копирует все соответствия из указанной карты в эту хеш-таблицу. |
protected void |
rehash() |
Увеличивает ёмкость этой хеш-таблицы и внутренне реорганизует её, чтобы эффективнее размещать записи и обращаться к ним. |
V |
remove |
Удаляет ключ (и соответствующее ему значение) из этой хеш-таблицы. |
int |
size() |
Возвращает число ключей в этой хеш-таблице. |
String |
toString() |
Возвращает строковое представление объекта Hashtable в виде набора записей, заключённых в фигурные скобки и разделённых символами ASCII « , » (запятая и пробел). |
Collection |
values() |
Возвращает представление значений, содержащихся в этой карте, в виде Collection. |
Методы, объявленные в классе Object
finalize, getClass, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения объекта Object. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени. |
Методы, объявленные в интерфейсе Map
forEach, getOrDefault, putIfAbsent, remove, replace, replace, replaceAll | Модификатор и тип | Метод | Описание |
|---|---|---|
default void |
forEach |
Выполняет заданное действие для каждой записи этой карты, пока не будут обработаны все записи или действие не выбросит исключение. |
default V |
getOrDefault |
Возвращает значение, сопоставленное указанному ключу, или defaultValue, если в этой карте нет соответствия для данного ключа. |
default V |
putIfAbsent |
Если указанному ключу ещё не сопоставлено значение (или ему сопоставлено null), сопоставляет ему заданное значение и возвращает null; в противном случае возвращает текущее значение (необязательная операция). |
default boolean |
remove |
Удаляет запись для указанного ключа только в том случае, если в данный момент ему сопоставлено указанное значение (необязательная операция). |
default V |
replace |
Заменяет запись для указанного ключа только в том случае, если в данный момент ему сопоставлено какое-либо значение (необязательная операция). |
default boolean |
replace |
Заменяет запись для указанного ключа только в том случае, если в данный момент ему сопоставлено указанное значение (необязательная операция). |
default void |
replaceAll |
Заменяет значение каждой записи результатом вызова заданной функции для этой записи, пока не будут обработаны все записи или функция не выбросит исключение (необязательная операция). |
Подробное описание конструкторов
Hashtable
public Hashtable(int initialCapacity, float loadFactor)
- Параметры:
-
initialCapacity— начальная емкость хеш-таблицы. -
loadFactor— коэффициент загрузки хеш-таблицы. - Исключения:
-
IllegalArgumentException— если начальная емкость меньше нуля или коэффициент загрузки неположителен.
Hashtable
public Hashtable(int initialCapacity)
- Параметры:
-
initialCapacity— начальная емкость хеш-таблицы. - Исключения:
-
IllegalArgumentException— если начальная емкость меньше нуля.
Hashtable
public Hashtable()
Hashtable
public Hashtable(Map<? extends K, ? extends V> t)
- Параметры:
-
t— Map, отображения которой необходимо поместить в эту Map. - Исключения:
-
NullPointerException— если заданная Map равна null. - Начиная с версии:
- 1.2
Подробное описание методов
size
isEmpty
keys
public Enumeration<K> keys()
- Определено в:
-
keysв классеDictionary<K,V> - Возвращает:
- перечисление ключей этой хеш-таблицы.
- См. также:
elements
public Enumeration<V> elements()
- Определено в:
-
elementsв классеDictionary<K,V> - Возвращает:
- перечисление значений этой хеш-таблицы.
- См. также:
contains
public boolean contains(Object value)
containsKey. Обратите внимание, что этот метод функционально идентичен методу containsValue (который входит в интерфейс Map из Collections Framework).
- Параметры:
-
value— значение, которое нужно найти - Возвращает:
-
trueтогда и только тогда, когда некоторый ключ сопоставлен аргументуvalueв этой хеш-таблице, согласно методуequals;falseв противном случае. - Исключения:
-
NullPointerException— если значение равноnull
containsValue
public boolean containsValue(Object value)
Обратите внимание, что этот метод функционально идентичен методу contains (который появился до интерфейса Map).
- Определено в:
-
containsValueв интерфейсеMap<K,V> - Параметры:
-
value— значение, наличие которого в этой хеш-таблице нужно проверить - Возвращает:
-
trueесли этой Map одному или нескольким ключам сопоставлено указанное значение - Исключения:
-
NullPointerException— если значение равноnull - Начиная с версии:
- 1.2
containsKey
public boolean containsKey(Object key)
- Определено в:
-
containsKeyв интерфейсеMap<K,V> - Параметры:
-
key— возможный ключ - Возвращает:
-
trueтогда и только тогда, когда указанный объект является ключом в этой хеш-таблице, согласно методуequals;falseв противном случае. - Исключения:
-
NullPointerException— если ключ равенnull - См. также:
get
public V get(Object key)
null, если в этой Map нет отображения для данного ключа. Формально, если эта Map содержит отображение от ключа k к значению v, такое что (key.equals(k)), этот метод возвращает v; в противном случае он возвращает null. (Такое отображение может быть не более чем одно.)
- Определено в:
-
getв интерфейсеMap<K,V> - Определено в:
-
getв классеDictionary<K,V> - Параметры:
-
key— ключ, значение которого нужно вернуть - Возвращает:
- значение, которому сопоставлен указанный ключ, или
null, если в этой Map нет отображения для данного ключа - Исключения:
-
NullPointerException— если указанный ключ равен null - См. также:
rehash
protected void rehash()
put
public V put(K key, V value)
key указанному value в этой хеш-таблице. Ни ключ, ни значение не могут быть null. Значение можно получить, вызвав метод get с ключом, равным исходному ключу.
- Определено в:
-
putв интерфейсеMap<K,V> - Определено в:
-
putв классеDictionary<K,V> - Параметры:
-
key— ключ хеш-таблицы -
value— значение - Возвращает:
- предыдущее значение указанного ключа в этой хеш-таблице или
null, если такого значения не было - Исключения:
-
NullPointerException— если ключ или значение равноnull - См. также:
remove
public V remove(Object key)
- Определено в:
-
removeв интерфейсеMap<K,V> - Определено в:
-
removeв классеDictionary<K,V> - Параметры:
-
key— ключ, который необходимо удалить - Возвращает:
- значение, которому был сопоставлен ключ в этой хеш-таблице, или
null, если ключу не было сопоставлено значение - Исключения:
-
NullPointerException— если ключ равенnull
putAll
public void putAll(Map<? extends K, ? extends V> t)
- Определено в:
-
putAllв интерфейсеMap<K,V> - Параметры:
-
t— отображения, которые необходимо сохранить в этой Map - Исключения:
-
NullPointerException— если указанная Map равна null - Начиная с версии:
- 1.2
clear
clone
toString
public String toString()
Hashtable в виде набора записей, заключенного в фигурные скобки и разделенного символами ASCII " , " (запятая и пробел). Каждая запись представлена в виде ключа, знака равенства = и соответствующего элемента; для преобразования ключа и элемента в строки используется метод toString.keySet
public Set<K> keySet()
Set. Набор поддерживается Map, поэтому изменения Map отражаются в наборе, и наоборот. Если Map изменяется во время итерации по набору (за исключением изменений с помощью собственной операции remove итератора), результаты итерации не определены. Набор поддерживает удаление элементов, при котором удаляется соответствующее отображение из Map, с помощью операций Iterator.remove, Set.remove, removeAll, retainAll и clear. Он не поддерживает операции add и addAll.entrySet
public Set<Map.Entry<K,V>> entrySet()
Set. Набор поддерживается Map, поэтому изменения Map отражаются в наборе, и наоборот. Если Map изменяется во время итерации по набору (за исключением изменений с помощью собственной операции remove итератора или операции setValue для записи Map, возвращенной итератором), результаты итерации не определены. Набор поддерживает удаление элементов, при котором удаляется соответствующее отображение из Map, с помощью операций Iterator.remove, Set.remove, removeAll, retainAll и clear. Он не поддерживает операции add и addAll.values
public Collection<V> values()
Collection. Коллекция поддерживается Map, поэтому изменения Map отражаются в коллекции, и наоборот. Если Map изменяется во время итерации по коллекции (за исключением изменений с помощью собственной операции remove итератора), результаты итерации не определены. Коллекция поддерживает удаление элементов, при котором удаляется соответствующее отображение из Map, с помощью операций Iterator.remove, Collection.remove, removeAll, retainAll и clear. Она не поддерживает операции add и addAll.equals
public boolean equals(Object o)
hashCode
computeIfAbsent
public V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
null), пытается вычислить значение с помощью заданной функции отображения и добавляет его в эту Map, если результат не равен null (необязательная операция). Если функция отображения возвращает null, отображение не записывается. Если сама функция отображения выбрасывает (непроверяемое) исключение, оно выбрасывается повторно, а отображение не записывается. Чаще всего этот метод используют для создания нового объекта, выступающего в качестве начального отображаемого значения или мемоизированного результата, например:
map.computeIfAbsent(key, k -> new Value(f(k)));
Также этот метод можно использовать для реализации Map с несколькими значениями, Map<K,Collection<V>>, поддерживающей несколько значений для одного ключа:
map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);
Функция отображения не должна изменять эту Map во время вычисления.
Этот метод приложит все усилия, чтобы выбросить ConcurrentModificationException, если функция отображения изменит эту Map во время вычисления.
- Определено в:
-
computeIfAbsentв интерфейсеMap<K,V> - Параметры:
-
key— ключ, которому необходимо сопоставить указанное значение -
mappingFunction— функция отображения для вычисления значения - Возвращает:
- текущее значение, сопоставленное указанному ключу (существующее или вычисленное), либо null, если вычисленное значение равно null
- Исключения:
-
ConcurrentModificationException— если обнаружено, что функция отображения изменила эту Map
computeIfPresent
public V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Если функция переназначения возвращает null, отображение удаляется. Если сама функция переназначения выбрасывает (непроверяемое) исключение, оно выбрасывается повторно, а текущее отображение остается без изменений.
Функция переназначения не должна изменять эту Map во время вычисления.
Этот метод приложит все усилия, чтобы выбросить ConcurrentModificationException, если функция переназначения изменит эту Map во время вычисления.
- Определено в:
-
computeIfPresentв интерфейсеMap<K,V> - Параметры:
-
key— ключ, которому необходимо сопоставить указанное значение -
remappingFunction— функция переназначения для вычисления значения - Возвращает:
- новое значение, сопоставленное указанному ключу, или null, если такого значения нет
- Исключения:
-
ConcurrentModificationException— если обнаружено, что функция переназначения изменила эту Map
compute
public V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
null, если текущего отображения нет (необязательная операция). Например, чтобы создать или дополнить String msg для отображения значения: map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg)) (Для таких целей часто удобнее использовать метод merge().) Если функция переназначения возвращает null, отображение удаляется (или остается отсутствующим, если его изначально не было). Если сама функция переназначения выбрасывает (непроверяемое) исключение, оно выбрасывается повторно, а текущее отображение остается без изменений.
Функция переназначения не должна изменять эту Map во время вычисления.
Этот метод приложит все усилия, чтобы выбросить ConcurrentModificationException, если функция переназначения изменит эту Map во время вычисления.
- Определено в:
-
computeв интерфейсеMap<K,V> - Параметры:
-
key— ключ, которому необходимо сопоставить указанное значение -
remappingFunction— функция переназначения для вычисления значения - Возвращает:
- новое значение, сопоставленное указанному ключу, или null, если такого значения нет
- Исключения:
-
ConcurrentModificationException— если обнаружено, что функция переназначения изменила эту Map
merge
public V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)
null. Этот метод может быть полезен при объединении нескольких сопоставленных значений для одного ключа. Например, чтобы создать или дополнить String msg для отображения значения: map.merge(key, msg, String::concat)
Если функция переназначения возвращает null, отображение удаляется. Если сама функция переназначения выбрасывает (непроверяемое) исключение, оно выбрасывается повторно, а текущее отображение остается без изменений.
Функция переназначения не должна изменять эту Map во время вычисления.
Этот метод приложит все усилия, чтобы выбросить ConcurrentModificationException, если функция переназначения изменит эту Map во время вычисления.
- Определено в:
-
mergeв интерфейсеMap<K,V> - Параметры:
-
key— ключ, которому необходимо сопоставить результирующее значение -
value— ненулевое значение, которое нужно объединить с существующим значением, сопоставленным ключу, или сопоставить ключу, если существующего значения нет или ему сопоставлено значение null -
remappingFunction— функция переназначения для повторного вычисления значения, если оно существует - Возвращает:
- новое значение, сопоставленное указанному ключу, или null, если ключу не сопоставлено значение
- Исключения:
-
ConcurrentModificationException— если обнаружено, что функция переназначения изменила эту Map
© 1993, 2025, 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.