Класс 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 имеет два параметра, влияющих на его производительность: начальный размер и коэффициент заполнения. Размер — это количество корзин в хеш-таблице, а начальный размер — это просто размер в момент создания хеш-таблицы. Обратите внимание, что хеш-таблица является открытой: в случае «столкновения хешей» одна корзина хранит несколько записей, которые необходимо последовательно искать. Коэффициент заполнения — это мера того, насколько заполненной может быть хеш-таблица, прежде чем ее размер будет автоматически увеличен. Параметры начального размера и коэффициента заполнения являются лишь подсказками для реализации. Точные детали того, когда и нужно ли вызывать метод перехеширования, зависят от реализации.
Как правило, значение коэффициента заполнения по умолчанию (.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, не являются быстродействующими; если хеш-таблица структурно изменяется в любой момент после создания перечисления, результаты перечисления не определены.
Обратите внимание, что гарантия быстродействующего поведения итератора не может быть гарантирована, поскольку в целом невозможно дать какие-либо гарантии в случае несинхронизированной одновременной модификации. Быстродействующие итераторы выбрасывают исключение 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<V> |
elements() |
Возвращает перечисление значений в этой хеш-таблице. |
Set<Map.Entry<K, |
entrySet() |
Возвращает представление Set сопоставлений, содержащихся в этой карте. |
boolean |
equals |
Сравнивает указанный объект с этой картой на равенство согласно определению в интерфейсе Map. |
V |
get |
Возвращает значение, которому соответствует указанный ключ, или null, если эта карта не содержит сопоставления для ключа. |
int |
hashCode() |
Возвращает хеш-код значения для этой карты согласно определению в интерфейсе Map. |
boolean |
isEmpty() |
Проверяет, отображает ли эта хеш-таблица какие-либо ключи в значения. |
Enumeration<K> |
keys() |
Возвращает перечисление ключей в этой хеш-таблице. |
Set<K> |
keySet() |
Возвращает представление Set ключей, содержащихся в этой карте. |
V |
merge |
Если указанный ключ не связан со значением или связан с null, связывает его с заданным ненулевым значением. |
V |
put |
Сопоставляет указанный key с указанным value в этой хеш-таблице. |
void |
putAll |
Копирует все отображения из заданной карты в эту хеш-таблицу. |
protected void |
rehash() |
Увеличивает ёмкость и внутренне переупорядочивает эту хеш-таблицу, чтобы более эффективно размещать и получать доступ к её элементам. |
V |
remove |
Удаляет ключ (и соответствующее значение) из этой хеш-таблицы. |
int |
size() |
Возвращает количество ключей в этой хеш-таблице. |
String |
toString() |
Возвращает строковое представление этого объекта Hashtable в виде набора записей, заключённых в фигурные скобки и разделённых символами ASCII " , " (запятая и пробел). |
Collection<V> |
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- объект Map, чьи отображения должны быть размещены в этой хеш-таблице. - Исключения:
-
NullPointerException- если указанный объект Map равен 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> - 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, 2021, 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/17/docs/api/java.base/java/util/Hashtable.html