Spec-Zone.ru › OpenJDK 24

Класс Hashtable<K,V>

java.lang.Object
java.util.Dictionary<K,V>
java.util.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
См. также:
  • 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)
Создаёт новую хеш-таблицу с теми же соответствиями, что и у данного объекта Map.

Краткое описание методов

Модификатор и тип Метод Описание
void clear()
Очищает эту хеш-таблицу, чтобы она не содержала ключей.
Object clone()
Создаёт поверхностную копию этой хеш-таблицы.
V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Попытка вычислить отображение для указанного ключа и его текущего сопоставленного значения, или null, если нет текущего сопоставления (необязательная операция).
V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
Если указанный ключ ещё не связан со значением (или связан с null), пытается вычислить его значение, используя заданную функцию сопоставления и поместить его в эту карту, если это возможно, иначе null (необязательная операция).
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()
Возвращает представление Set отображений, содержащихся в этой карте.
boolean equals(Object o)
Сравнивает указанный объект с этим объектом Map на равенство, согласно определению в интерфейсе Map.
V get(Object key)
Возвращает значение, которому сопоставлен указанный ключ, или null, если в этой карте нет сопоставления для ключа.
int hashCode()
Возвращает хэш-код для этой Map, согласно определению в интерфейсе Map.
boolean isEmpty()
Проверяет, отображает ли эта хеш-таблица ни одного ключа на значения.
Enumeration<K> keys()
Возвращает перечисление ключей в этой хеш-таблице.
Set<K> keySet()
Возвращает представление Set ключей, содержащихся в этой карте.
V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)
Если указанный ключ не связан со значением или связан с null, связывает его с заданным ненулевым значением (необязательная операция).
V put(K key, V value)
Отображает указанный key на указанный value в этой хеш-таблице.
void putAll(Map<? extends K, ? extends V> t)
Копирует все отображения из указанной карты в эту хеш-таблицу.
protected void rehash()
Увеличивает ёмкость и внутренне переупорядочивает эту хеш-таблицу для более эффективного размещения и доступа к её записям.
V remove(Object key)
Удаляет ключ (и соответствующее значение) из этой хеш-таблицы.
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)
Создаёт новую пустую хэш-таблицу с указанной начальной ёмкостью и стандартным коэффициентом заполнения (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()
Очищает эту хэш-таблицу, чтобы она не содержала ключей.
Указано в:
clear в интерфейсе Map<K,V>

clone

public Object clone()
Создаёт поверхностную копию этой хэш-таблицы. Копируется вся структура самой хэш-таблицы, но ключи и значения не клонируются. Это относительно дорогостоящая операция.
Переопределяет:
clone в классе Object
Возвращает:
клон хэш-таблицы
См. также:
  • Cloneable

toString

public String toString()
Возвращает строковое представление этого объекта Hashtable в форме набора записей, заключённых в фигурные скобки и разделённых символами " , " (запятая и пробел). Каждая запись отображается как ключ, знак равенства = и соответствующий элемент, где используется метод toString для преобразования ключа и элемента в строки.
Переопределяет:
toString в классе Object
Возвращает:
строковое представление этой хэш-таблицы

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 сообщение в сопоставленное значение:
 
 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, он связывается с заданным ненулевым значением (необязательная операция). В противном случае, связанное значение заменяется результатом заданной функции переприсвоения или удаляется, если результат равен 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API