Класс 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, зависят от реализации.
В целом, значение по умолчанию для коэффициента заполнения (.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 методов представления коллекции всех методов этого класса, являются быстропроваливающимися: если хеш-таблица структурно изменяется в любой момент после создания итератора, каким-либо способом, кроме метода remove самого итератора, итератор вызовет исключение ConcurrentModificationException. Таким образом, при одновременном изменении итератор быстро и аккуратно завершает работу, а не рискует произвольным непредсказуемым поведением в неопределенное время в будущем. Перечисления, возвращаемые методами Hashtable keys и elements, не являются быстропроваливающимися; если хеш-таблица структурно изменяется в любой момент после создания перечисления, результаты перечисления неопределенны.
Обратите внимание, что быстрое проваливание итератора не может быть гарантировано, так как, как правило, невозможно дать какие-либо гарантии при одновременном изменении без синхронизации. Быстропроваливающиеся итераторы выбрасывают ConcurrentModificationException по принципу наилучших усилий. Поэтому неправильно писать программу, которая полагается на это исключение для своей корректности: быстрое проваливание итераторов должно использоваться только для обнаружения ошибок.
Начиная с Java 2 platform v1.2, этот класс был модернизирован для реализации интерфейса Map, что делает его членом Java Collections Framework. В отличие от новых реализаций коллекций, Hashtable синхронизирован. Если реализация, безопасная для потоков, не требуется, рекомендуется использовать HashMap вместо Hashtable. Если требуется высококонкурентная реализация, безопасная для потоков, рекомендуется использовать ConcurrentHashMap вместо Hashtable.
- Since:
- 1.0
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Hashtable() |
Создаёт новую, пустую хеш-таблицу с начальной ёмкостью по умолчанию (11) и коэффициентом заполнения (0.75). |
Hashtable |
Создаёт новую, пустую хеш-таблицу с указанной начальной ёмкостью и коэффициентом заполнения по умолчанию (0.75). |
Hashtable |
Создаёт новую, пустую хеш-таблицу с указанной начальной ёмкостью и указанным коэффициентом заполнения. |
Hashtable |
Создаёт новую хеш-таблицу с теми же соответствиями, что и у данного объекта Map. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
clear() |
Очищает эту хеш-таблицу, чтобы она не содержала ключей. |
Object |
clone() |
Создаёт поверхностную копию этой хеш-таблицы. |
V |
compute |
Попытка вычислить отображение для указанного ключа и его текущего сопоставленного значения, или null, если нет текущего сопоставления (необязательная операция). |
V |
computeIfAbsent |
Если указанный ключ ещё не связан со значением (или связан с null), пытается вычислить его значение, используя заданную функцию сопоставления и поместить его в эту карту, если это возможно, иначе null (необязательная операция). |
V |
computeIfPresent |
Если значение для указанного ключа присутствует и не равно null, пытается вычислить новое отображение, используя ключ и его текущее сопоставленное значение (необязательная операция). |
boolean |
contains |
Проверяет, отображает ли какой-либо ключ указанное значение в этой хеш-таблице. |
boolean |
containsKey |
Проверяет, является ли указанный объект ключом в этой хеш-таблице. |
boolean |
containsValue |
Возвращает true, если эта хеш-таблица отображает один или несколько ключей на это значение. |
Enumeration |
elements() |
Возвращает перечисление значений в этой хеш-таблице. |
Set |
entrySet() |
Возвращает представление Set отображений, содержащихся в этой карте. |
boolean |
equals |
Сравнивает указанный объект с этим объектом Map на равенство, согласно определению в интерфейсе Map. |
V |
get |
Возвращает значение, которому сопоставлен указанный ключ, или null, если в этой карте нет сопоставления для ключа. |
int |
hashCode() |
Возвращает хэш-код для этой Map, согласно определению в интерфейсе 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 значений, содержащихся в этой карте. |
Методы, объявленные в классе java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе java.util.Map
forEach, getOrDefault, putIfAbsent, remove, replace, replace, 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- карта, чьи отображения должны быть помещены в эту карту. - Исключения:
-
NullPointerException- если указанная карта равна 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 в рамках набора коллекций).
- Параметры:
-
value- значение для поиска - Возвращает:
-
true, если и только если какой-либо ключ отображается на аргументvalueв этой хэш-таблице, как определяется методомequals;falseв противном случае. - Исключения:
-
NullPointerException- если значение равноnull
containsValue
public boolean containsValue(Object value)
Обратите внимание, что этот метод функционально идентичен методу contains (который предшествовал интерфейсу Map).
- Задано:
-
containsValueв интерфейсеMap<K,V> - Параметры:
-
value- значение, присутствие которого в этой хэш-таблице должно быть проверено - Возвращает:
-
true, если эта карта отображает один или несколько ключей на указанное значение - Исключения:
-
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, если эта карта не содержит сопоставления для ключа. Более формально, если эта карта содержит сопоставление от ключа k до значения v таким образом, что (key.equals(k)), то этот метод возвращает v; в противном случае возвращает null. (Может быть не более одного такого отображения).
- Задано:
-
getв интерфейсеMap<K,V> - Задано:
-
getв классеDictionary<K,V> - Параметры:
-
key- ключ, связанное значение которого должно быть возвращено - Возвращает:
- значение, которому сопоставлен указанный ключ, или
null, если эта карта не содержит сопоставления для ключа - Исключения:
-
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- сопоставления, которые необходимо сохранить в этой карте - Выбрасывает:
-
NullPointerException- если указанная карта равна null - С:
- 1.2
clear
clone
toString
public String toString()
Hashtable в форме набора записей, заключённых в фигурные скобки и разделённых символами " , " (запятая и пробел). Каждая запись отображается как ключ, знак равенства = и соответствующий элемент, где используется метод toString для преобразования ключа и элемента в строки.keySet
public Set<K> keySet()
Set ключей, содержащихся в этой карте. Множество поддерживается картой, поэтому изменения в карте отражаются в множестве и наоборот. Если карта изменяется во время итерации по множеству (кроме операций самого итератора remove), результаты итерации не определены. Множество поддерживает удаление элементов, удаляя соответствующее сопоставление из карты посредством операций Iterator.remove, Set.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.values
public Collection<V> values()
Collection значений, содержащихся в этой карте. Коллекция поддерживается картой, поэтому изменения в карте отражаются в коллекции и наоборот. Если карта изменяется во время итерации по коллекции (кроме операций самого итератора remove), результаты итерации не определены. Коллекция поддерживает удаление элементов, удаляя соответствующее сопоставление из карты посредством операций 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), пытается вычислить его значение с помощью заданной функции отображения и вводит его в эту карту, если null (необязательная операция). Если функция отображения возвращает null, никакое сопоставление не записывается. Если сама функция отображения выбросит (непроверенное) исключение, исключение перебрасывается, и никакое сопоставление не записывается. Наиболее частое использование — создание нового объекта, служащего начальным сопоставленным значением или кэшированным результатом, как в:
map.computeIfAbsent(key, k -> new Value(f(k)));
Или для реализации карты с несколькими значениями, Map<K,Collection<V>>, поддерживающей несколько значений на ключ:
map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);
Функция отображения не должна изменять эту карту во время вычисления.
Этот метод будет, по возможности, выбрасывать ConcurrentModificationException, если функция отображения изменила эту карту во время вычисления.
- Указано в:
-
computeIfAbsentв интерфейсеMap<K,V> - Параметры:
-
key- ключ, с которым должно быть связано указанное значение -
mappingFunction- функция отображения для вычисления значения - Возвращает:
- текущее (существующее или вычисленное) значение, связанное с указанным ключом, или null, если вычисленное значение равно null
- Выбрасывает:
-
ConcurrentModificationException- если выявлено, что функция отображения изменила эту карту
computeIfPresent
public V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Если функция переназначения возвращает null, сопоставление удаляется. Если сама функция переназначения выбросит (непроверенное) исключение, исключение перебрасывается, и текущее сопоставление остаётся неизменным.
Функция переназначения не должна изменять эту карту во время вычисления.
Этот метод будет, по возможности, выбрасывать ConcurrentModificationException, если функция переназначения изменила эту карту во время вычисления.
- Указано в:
-
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> - Parameters:
-
key- ключ, с которым должно быть связано указанное значение -
remappingFunction- функция переприсвоения для вычисления значения - Returns:
- новое значение, связанное с указанным ключом, или null, если такого нет
- Throws:
-
ConcurrentModificationException- если было обнаружено, что функция переприсвоения изменила этот массив
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, отображение удаляется. Если сама функция переприсвоения вызывает (непроверенное) исключение, исключение перебрасывается, а текущее отображение остается неизменным.
Функция переприсвоения не должна изменять этот массив во время вычисления.
Этот метод будет по возможности выбрасывать ConcurrentModificationException, если функция переприсвоения изменила этот массив во время вычисления.
- Specified by:
-
mergeв интерфейсеMap<K,V> - Parameters:
-
key- ключ, с которым будет связано результирующее значение -
value- ненулевое значение, которое должно быть объединённо с существующим значением, связанным с ключом, или, если нет существующего значения или значение null связано с ключом, должно быть связано с ключом -
remappingFunction- функция переприсвоения для повторного вычисления значения, если оно присутствует - Returns:
- новое значение, связанное с указанным ключом, или null, если ключ не связан ни с каким значением
- Throws:
-
ConcurrentModificationException- если было обнаружено, что функция переприсвоения изменила этот массив
© 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/Hashtable.html