Spec-Zone.ru › OpenJDK 21

Класс 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 имеет два параметра, которые влияют на его производительность: начальную емкость и коэффициент заполнения. Емкость — это количество корзин в хеш-таблице, а начальная емкость — это просто емкость на момент создания хеш-таблицы. Обратите внимание, что хеш-таблица является открытой: в случае "коллизии хешей" одна корзина хранит несколько записей, которые необходимо последовательно просматривать. Коэффициент заполнения — это мера того, насколько хеш-таблица может быть заполнена, прежде чем ее емкость будет автоматически увеличена. Параметры начальной емкости и коэффициента заполнения являются лишь подсказками для реализации. Точные детали того, когда и будет ли вызываться метод 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
См. также:
  • 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.
V get(Object key)
Возвращает значение, которому сопоставлен указанный ключ, или null, если в этой карте нет сопоставления для ключа.
int hashCode()
Возвращает хэш-код значения для этой карты, согласно определению в интерфейсе 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 объекта в виде набора записей, заключённых в фигурные скобки и разделенных символами " , " (запятая и пробел).
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)
Копирует все сопоставления из указанной карты в эту хеш-таблицу. Эти сопоставления заменят любые сопоставления, которые эта хеш-таблица имела для любых ключей, присутствующих в указанной карте.
Specified by:
putAll in interface Map<K,V>
Parameters:
t - сопоставления, которые должны быть сохранены в этой карте
Throws:
NullPointerException - если указанная карта равна null
Since:
1.2

clear

public void clear()
Очищает эту хеш-таблицу, чтобы она не содержала ключей.
Specified by:
clear in interface Map<K,V>

clone

public Object clone()
Создает поверхностную копию этой хеш-таблицы. Копируется вся структура самой хеш-таблицы, но ключи и значения не клонируются. Это относительно ресурсоёмкая операция.
Overrides:
clone in class Object
Returns:
клонированная хеш-таблица
See Also:
  • Cloneable

toString

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

keySet

public Set<K> keySet()
Возвращает представление типа Set ключей, содержащихся в этой карте. Множество подкрепляется картой, поэтому изменения в карте отражаются в множестве и наоборот. Если карта изменяется во время итерации по множеству (кроме операций самого итератора, таких как remove операция), результаты итерации не определены. Множество поддерживает удаление элементов, что удаляет соответствующее сопоставление из карты, посредством операций Iterator.remove, Set.remove, removeAll, retainAll, и clear. Оно не поддерживает операции add или addAll.
Specified by:
keySet in interface Map<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:
entrySet in interface Map<K,V>
Returns:
представление множества сопоставлений, содержащихся в этой карте
Since:
1.2

values

public Collection<V> values()
Возвращает представление типа Collection значений, содержащихся в этой карте. Коллекция подкрепляется картой, поэтому изменения в карте отражаются в коллекции и наоборот. Если карта изменяется во время итерации по коллекции (кроме операций самого итератора, таких как remove операция), результаты итерации не определены. Коллекция поддерживает удаление элементов, что удаляет соответствующее сопоставление из карты, посредством операций Iterator.remove, Collection.remove, removeAll, retainAll и clear. Она не поддерживает операции add или addAll.
Specified by:
values in interface Map<K,V>
Returns:
представление коллекции значений, содержащихся в этой карте
Since:
1.2

equals

public boolean equals(Object o)
Сравнивает указанный объект с этой картой на равенство, согласно определению в интерфейсе Map.
Specified by:
equals in interface Map<K,V>
Overrides:
equals in class Object
Parameters:
o - объект, который необходимо сравнить на равенство с этой хеш-таблицей
Returns:
true, если указанный объект равен этой карте
Since:
1.2
See Also:
  • Map.equals(Object)

hashCode

public int hashCode()
Возвращает хэш-код этой карты согласно определению в интерфейсе Map.
Specified by:
hashCode in interface Map<K,V>
Overrides:
hashCode in class Object
Returns:
значение хэш-кода для этого объекта.
Since:
1.2
See Also:
  • 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, если функция сопоставления изменила эту карту во время вычисления.

Specified by:
computeIfAbsent in interface Map<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, пытается вычислить новое сопоставление, учитывая ключ и его текущее сопоставленное значение.

Если функция переназначения возвращает null, сопоставление удаляется. Если сама функция переназначения вызывает исключение (непроверяемое), исключение перебрасывается, и текущее сопоставление остается неизменным.

Функция переназначения не должна изменять эту карту во время вычисления.

Этот метод по возможности бросит исключение ConcurrentModificationException, если функция переназначения изменила эту карту во время вычисления.

Specified by:
computeIfPresent in interface Map<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, связывает его с заданным ненулевым значением. В противном случае заменяет связанное значение результатом заданной функции перераспределения или удаляет, если результат 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

Spec-Zone.ru

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