Класс Hashtable<K,V>
- java.lang.Object
-
- java.util.Dictionary<K,V>
-
- java.util.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
- См. также:
-
Object.equals(java.lang.Object),Object.hashCode(),rehash(),Collection,Map,HashMap,TreeMap, Сериализованная форма
Конструкторы
| Конструктор | Описание |
|---|---|
Hashtable() | Создает новую пустую хеш-таблицу с начальной емкостью по умолчанию (11) и коэффициентом заполнения (0.75). |
Hashtable(int initialCapacity) | Создает новую пустую хеш-таблицу с указанной начальной емкостью и коэффициентом заполнения по умолчанию (0.75). |
Hashtable(int initialCapacity,
float loadFactor) | Создает новую пустую хеш-таблицу с указанной начальной емкостью и указанным коэффициентом заполнения. |
Hashtable(Map<? extends K,? extends V> t) | Создает новую хеш-таблицу с теми же отображениями, что и заданная карта. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
void | clear() | Очищает эту хеш-таблицу, чтобы она не содержала ключей. |
Object | clone() | Создает поверхностную копию этой хеш-таблицы. |
V | compute(K key,
BiFunction<? super K,? super V,? extends V> remappingFunction) | Попытка вычислить отображение для указанного ключа и его текущего сопоставленного значения (или |
V | computeIfAbsent(K key,
Function<? super K,? extends V> mappingFunction) | Если указанный ключ ещё не связан со значением (или сопоставлен с |
V | computeIfPresent(K key,
BiFunction<? super K,? super V,? extends V> remappingFunction) | Если значение для указанного ключа присутствует и не null, пытается вычислить новое отображение, используя ключ и его текущее сопоставленное значение. |
boolean | contains(Object value) | Проверяет, отображается ли какой-либо ключ в указанное значение в этой хеш-таблице. |
boolean | containsKey(Object key) | Проверяет, является ли указанный объект ключом в этой хеш-таблице. |
boolean | containsValue(Object value) | Возвращает true, если эта хеш-таблица отображает один или несколько ключей в это значение. |
Enumeration<V> | elements() | Возвращает перечисление значений в этой хеш-таблице. |
Set<Map.Entry<K,V>> | entrySet() | Возвращает представление |
boolean | equals(Object o) | Сравнивает указанный объект с этой картой на равенство в соответствии с определением в интерфейсе Map. |
V | get(Object key) | Возвращает значение, которому сопоставлен указанный ключ, или |
int | hashCode() | Возвращает значение хэш-кода для этой карты в соответствии с определением в интерфейсе Map. |
boolean | isEmpty() | Проверяет, отображает ли эта хеш-таблица какие-либо ключи в значения. |
Enumeration<K> | keys() | Возвращает перечисление ключей в этой хеш-таблице. |
Set<K> | keySet() | Возвращает представление |
V | merge(K key,
V value,
BiFunction<? super V,? super V,? extends V> remappingFunction) | Если указанный ключ ещё не связан со значением или связан с null, связывает его с заданным ненулевым значением. |
V | put(K key,
V value) | Сопоставляет указанный |
void | putAll(Map<? extends K,? extends V> t) | Копирует все отображения из указанной карты в эту хеш-таблицу. |
protected void | rehash() | Увеличивает емкость и внутренне переупорядочивает эту хеш-таблицу, чтобы более эффективно размещать и получать доступ к её записям. |
V | remove(Object key) | Удаляет ключ (и соответствующее значение) из этой хеш-таблицы. |
int | size() | Возвращает количество ключей в этой хеш-таблице. |
String | toString() | Возвращает строковое представление этого объекта |
Collection<V> | values() | Возвращает представление |
Методы, объявленные в классе 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)
Создаёт новую пустую хеш-таблицу с заданной начальной ёмкостью и коэффициентом загрузки по умолчанию (0.75).
- Параметры:
-
initialCapacity- начальная ёмкость хеш-таблицы. - Исключения:
-
IllegalArgumentException- если начальная ёмкость меньше нуля.
Hashtable
public Hashtable()
Создаёт новую пустую хеш-таблицу с начальной ёмкостью по умолчанию (11) и коэффициентом загрузки по умолчанию (0.75).
Hashtable
public Hashtable(Map<? extends K,? extends V> t)
Создаёт новую хеш-таблицу с теми же отображениями, что и заданная карта. Хеш-таблица создаётся с начальной ёмкостью, достаточной для хранения отображений в заданной карте, и коэффициентом загрузки по умолчанию (0.75).
- Параметры:
-
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> - Возвращает:
- перечисление ключей в этой хэш-таблице.
- См. также:
-
Enumeration,elements(),keySet(),Map
elements
public Enumeration<V> elements()
Возвращает перечисление значений в этой хэш-таблице. Используйте методы перечисления в возвращённом объекте, чтобы извлечь элементы последовательно. Если хэш-таблица структурно изменяется во время перечисления значений, результаты перечисления не определены.
- Определено в:
-
elementsв классеDictionary<K,V> - Возвращает:
- перечисление значений в этой хэш-таблице.
- См. также:
-
Enumeration,keys(),values(),Map
contains
public boolean contains(Object value)
Проверяет, отображает ли какой-либо ключ заданное значение в этой хэш-таблице. Эта операция дороже, чем метод containsKey.
Обратите внимание, что этот метод идентичен по функциональности методу containsValue (который является частью интерфейса Map в рамках коллекции).
- Параметры:
-
value- значение для поиска - Возвращает:
-
trueтогда и только тогда, когда какой-либо ключ отображается на значениеvalueаргумент в этой хэш-таблице, как определено методомequals;falseв противном случае. - Исключения:
-
NullPointerException- если значение равноnull
containsValue
public boolean containsValue(Object value)
Возвращает true, если эта хэш-таблица отображает один или несколько ключей в это значение.
Обратите внимание, что этот метод идентичен по функциональности методу 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 - См. также:
contains(Object)
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 - См. также:
put(Object, Object)
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 - См. также:
-
Object.equals(Object),get(Object)
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
public void clear()
Очищает эту хэш-таблицу так, чтобы она не содержала ключей.
clone
public Object clone()
Создаёт поверхностную копию этой хэш-таблицы. Копируется вся структура самой хэш-таблицы, но ключи и значения не клонируются. Это относительно дорогая операция.
toString
public String toString()
Возвращает строковое представление этого объекта Hashtable в виде набора записей, заключённых в фигурные скобки и разделённых символами ASCII " , " (запятая и пробел). Каждая запись отображается как ключ, знак равенства =, и связанный элемент, где используется метод toString для преобразования ключа и элемента в строки.
keySet
public Set<K> keySet()
Возвращает представление Set ключей, содержащихся в этой карте. Множество основано на карте, поэтому изменения в карте отражаются в множестве и наоборот. Если карта изменяется во время итерации по множеству (кроме операции remove самого итератора), результаты итерации не определены. Множество поддерживает удаление элементов, которое удаляет соответствующее сопоставление из карты, посредством операций Iterator.remove, Set.remove, removeAll, retainAll, и clear. Оно не поддерживает операции add или addAll.
- Определено в:
-
keySetв интерфейсеMap<K,V> - Возвращает:
- представление множества ключей, содержащихся в этой карте
- С:
- 1.2
entrySet
public Set<Map.Entry<K,V>> entrySet()
Возвращает вид Set отображений, содержащихся в этой карте. Множество поддерживается картой, поэтому изменения в карте отражаются в множестве и наоборот. Если карта изменяется во время итерации по множеству (кроме случаев изменения через собственное remove операции итератора или через операцию setValue по элементу карты, возвращённому итератором), результаты итерации не определены. Множество поддерживает удаление элементов, что удаляет соответствующее отображение из карты, через операции Iterator.remove, Set.remove, removeAll, retainAll и clear. Оно не поддерживает операции add или addAll.
- Определено в:
-
entrySetв интерфейсеMap<K,V> - Возвращает:
- вид множества отображений, содержащихся в этой карте
- С тех пор:
- 1.2
values
public Collection<V> values()
Возвращает вид Collection значений, содержащихся в этой карте. Коллекция поддерживается картой, поэтому изменения в карте отражаются в коллекции, и наоборот. Если карта изменяется во время итерации по коллекции (кроме случаев изменения через собственную remove операцию итератора), результаты итерации не определены. Коллекция поддерживает удаление элементов, что удаляет соответствующее отображение из карты, через операции Iterator.remove, Collection.remove, removeAll, retainAll и clear. Она не поддерживает операции add или addAll.
- Определено в:
-
valuesв интерфейсеMap<K,V> - Возвращает:
- вид коллекции значений, содержащихся в этой карте
- С тех пор:
- 1.2
equals
public boolean equals(Object o)
Сравнивает указанный объект с этой картой на равенство в соответствии с определением в интерфейсе Map.
- Определено в:
-
equalsв интерфейсеMap<K,V> - Переопределяет:
-
equalsв классеObject - Параметры:
-
o- объект для сравнения на равенство с этой хеш-таблицей - Возвращает:
- true, если указанный объект равен этой карте
- С тех пор:
- 1.2
- См. также:
Map.equals(Object)
hashCode
public int hashCode()
Возвращает значение хэш-кода для этой карты в соответствии с определением в интерфейсе Map.
- Определено в:
-
hashCodeв интерфейсеMap<K,V> - Переопределяет:
-
hashCodeв классеObject - Возвращает:
- значение хэш-кода для этого объекта.
- С тех пор:
- 1.2
- См. также:
Map.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, пытается вычислить новое отображение, учитывая ключ и его текущее сопоставленное значение.
Если функция переназначения возвращает 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 msg к отображению значения:
map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))(Метод
merge() часто проще использовать для таких целей.)
Если функция переназначения возвращает null, отображение удаляется (или остаётся отсутствующим, если изначально отсутствовало). Если сама функция переназначения вызывает (непроверенное) исключение, исключение перебрасывается, а текущее отображение остаётся неизменным.
Функция переназначения не должна изменять эту карту во время вычисления.
Этот метод, с максимальной эффективностью, может выбросить ConcurrentModificationException, если функция переназначения изменила эту карту во время вычисления.
- Определено в:
-
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, если функция переназначения изменила эту карту во время вычисления.
- Определено в:
-
mergeв интерфейсеMap<K,V> - Параметры:
-
key- ключ, с которым должно быть связано результирующее значение -
value- ненулевое значение, которое должно быть объединено с существующим значением, связанным с ключом, или, если нет существующего значения или значение null связано с ключом, должно быть связано с ключом -
remappingFunction- функция переназначения для повторного вычисления значения, если оно присутствует - Возвращает:
- новое значение, связанное с указанным ключом, или null, если значение не связано с ключом
- Исключения:
-
ConcurrentModificationException- если обнаружено, что функция переназначения изменила эту карту
© 1993, 2020, 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/11/docs/api/java.base/java/util/Hashtable.html