Класс 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)

Попытка вычислить отображение для указанного ключа и его текущего сопоставленного значения (или 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 в виде набора записей, заключённых в фигурные скобки и разделённых символами 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 в виде набора записей, заключённых в фигурные скобки и разделённых символами ASCII " , " (запятая и пробел). Каждая запись отображается как ключ, знак равенства =, и связанный элемент, где используется метод 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 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

Spec-Zone .ru
спецификации, руководства, описания, API