Класс Hashtable<K, V>
- Type Parameters:
-
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. Таким образом, при одновременном изменении итератор быстро и четко завершается, а не подвергает риску произвольного, непредсказуемого поведения в неопределенное время в будущем. Перечисления, возвращаемые методами keys и elements Hashtable, не являются быстропроваливающимися; если хеш-таблица изменяется структурно в любой момент после создания перечисления, результаты перечисления будут неопределенными.
Обратите внимание, что поведение быстропроваливающегося итератора не может быть гарантировано, так как в целом невозможно дать какие-либо твердые гарантии при наличии несинхронизированного одновременного изменения. Быстропроваливающиеся итераторы выбрасывают исключение ConcurrentModificationException в режиме наилучшего достижения. Следовательно, было бы неправильно писать программу, которая полагалась бы на это исключение для своей корректности: поведение быстропроваливающихся итераторов следует использовать только для обнаружения ошибок.
Начиная с платформы Java 2 v1.2, этот класс был переработан для реализации интерфейса Map, сделав его членом Java Collections Framework. В отличие от новых реализаций коллекций, Hashtable синхронизирован. Если нет необходимости в потокобезопасной реализации, рекомендуется использовать HashMap вместо Hashtable. Если требуется потокобезопасная высококонкурентная реализация, то рекомендуется использовать ConcurrentHashMap вместо Hashtable.
- С:
- 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. |
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 объекта в виде набора записей, заключённых в фигурные скобки и разделенных символами " , " (запятая и пробел). |
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
public int size()
- Указано в:
-
sizeв интерфейсеMap<K,V> - Указано в:
-
sizeв классеDictionary<K,V> - Возвращает:
- количество ключей в этой хэш-таблице.
isEmpty
public boolean isEmpty()
- Указано в:
-
isEmptyв интерфейсеMap<K,V> - Указано в:
-
isEmptyв классеDictionary<K,V> - Возвращает:
-
trueесли эта хэш-таблица не отображает какие-либо ключи на значения;falseв противном случае.
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)
- Specified by:
-
putAllin interfaceMap<K,V> - Parameters:
-
t- сопоставления, которые должны быть сохранены в этой карте - Throws:
-
NullPointerException- если указанная карта равна null - Since:
- 1.2
clear
public void clear()
- Specified by:
-
clearin interfaceMap<K,V>
clone
public Object clone()
- Overrides:
-
clonein classObject - Returns:
- клонированная хеш-таблица
- See Also:
toString
public String toString()
Hashtable в виде набора элементов, заключенных в фигурные скобки и разделенных символами ASCII " , " (запятая и пробел). Каждый элемент представлен в виде ключа, знака равенства =, и связанного с ним значения, где используется метод toString для преобразования ключа и значения в строки.- Overrides:
-
toStringin classObject - Returns:
- строковое представление этой хеш-таблицы
keySet
public Set<K> keySet()
Set ключей, содержащихся в этой карте. Множество подкрепляется картой, поэтому изменения в карте отражаются в множестве и наоборот. Если карта изменяется во время итерации по множеству (кроме операций самого итератора, таких как remove операция), результаты итерации не определены. Множество поддерживает удаление элементов, что удаляет соответствующее сопоставление из карты, посредством операций Iterator.remove, Set.remove, removeAll, retainAll, и clear. Оно не поддерживает операции add или addAll. - Specified by:
-
keySetin interfaceMap<K,V> - Returns:
- представление множества ключей, содержащихся в этой карте
- Since:
- 1.2
entrySet
public Set<Map.Entry<K,V>> entrySet()
Set сопоставлений, содержащихся в этой карте. Множество подкрепляется картой, поэтому изменения в карте отражаются в множестве и наоборот. Если карта изменяется во время итерации по множеству (кроме операций самого итератора, таких как remove операция, или через операцию setValue на элементе карты, возвращенном итератором), результаты итерации не определены. Множество поддерживает удаление элементов, что удаляет соответствующее сопоставление из карты, посредством операций Iterator.remove, Set.remove, removeAll, retainAll и clear. Оно не поддерживает операции add или addAll. - Specified by:
-
entrySetin interfaceMap<K,V> - Returns:
- представление множества сопоставлений, содержащихся в этой карте
- Since:
- 1.2
values
public Collection<V> values()
Collection значений, содержащихся в этой карте. Коллекция подкрепляется картой, поэтому изменения в карте отражаются в коллекции и наоборот. Если карта изменяется во время итерации по коллекции (кроме операций самого итератора, таких как remove операция), результаты итерации не определены. Коллекция поддерживает удаление элементов, что удаляет соответствующее сопоставление из карты, посредством операций Iterator.remove, Collection.remove, removeAll, retainAll и clear. Она не поддерживает операции add или addAll. - Specified by:
-
valuesin interfaceMap<K,V> - Returns:
- представление коллекции значений, содержащихся в этой карте
- Since:
- 1.2
equals
public boolean equals(Object o)
- Specified by:
-
equalsin interfaceMap<K,V> - Overrides:
-
equalsin classObject - Parameters:
-
o- объект, который необходимо сравнить на равенство с этой хеш-таблицей - Returns:
- true, если указанный объект равен этой карте
- Since:
- 1.2
- See Also:
hashCode
public int hashCode()
- Specified by:
-
hashCodein interfaceMap<K,V> - Overrides:
-
hashCodein classObject - Returns:
- значение хэш-кода для этого объекта.
- Since:
- 1.2
- See Also:
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:
-
computeIfAbsentin interfaceMap<K,V> - Parameters:
-
key- ключ, с которым должно быть связано указанное значение -
mappingFunction- функция сопоставления для вычисления значения - Returns:
- текущее (существующее или вычисленное) значение, связанное с указанным ключом, или null, если вычисленное значение равно null
- Throws:
-
ConcurrentModificationException- если обнаружено, что функция сопоставления изменила эту карту
computeIfPresent
public V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Если функция переназначения возвращает null, сопоставление удаляется. Если сама функция переназначения вызывает исключение (непроверяемое), исключение перебрасывается, и текущее сопоставление остается неизменным.
Функция переназначения не должна изменять эту карту во время вычисления.
Этот метод по возможности бросит исключение ConcurrentModificationException, если функция переназначения изменила эту карту во время вычисления.
- Specified by:
-
computeIfPresentin interfaceMap<K,V> - Parameters:
-
key- ключ, с которым должно быть связано указанное значение -
remappingFunction- функция переназначения для вычисления значения - Returns:
- новое значение, связанное с указанным ключом, или null, если значение не существует
- Throws:
-
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. Этот метод может быть полезен при объединении нескольких сопоставленных значений для ключа. Например, для создания или добавления String msg к отображаемому значению:
map.merge(key, msg, String::concat)
Если функция перераспределения возвращает null, отображение удаляется. Если сама функция перераспределения вызывает (непроверенное) исключение, исключение перебрасывается, а текущее отображение остается неизменным.
Функция перераспределения не должна изменять этот массив во время вычисления.
Этот метод будет по возможности вызывать ConcurrentModificationException, если функция перераспределения изменила этот массив во время вычисления.
- Specified by:
-
mergeв интерфейсеMap<K,V> - Параметры:
-
key- ключ, с которым должно быть связано результирующее значение -
value- ненулевое значение, которое должно быть объединено с существующим значением, связанным с ключом, или, если нет существующего значения или значение null связано с ключом, должно быть связано с ключом -
remappingFunction- функция перераспределения для повторного вычисления значения, если оно присутствует - Возвращает:
- новое значение, связанное с указанным ключом, или null, если значение не связано с ключом
- Исключение:
-
ConcurrentModificationException- если обнаружено, что функция перераспределения изменила этот массив
© 1993, 2023, 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://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Hashtable.html