Класс Hashtable


Класс Hashtable в Java был частью оригинального java.util и представляет собой конкретную реализацию Dictionary.

Однако, Java 2 переработал Hashtable, чтобы он также реализовал интерфейс Map. Таким образом, Hashtable теперь интегрирован в структуру коллекций. Он схож с HashMap, но синхронизован.

Как и HashMap, в Java Hashtable хранит пары ключей/значений в хэш-таблице. Используя Hashtable, вы указываете объект, который используется как ключ, и значение, которое вы ходите связать с этим ключом. Этот ключ затем хэшируется, а полученный хэш-код используется как индекс, в котором значение хранится в таблице.

Конструкторы
Вот список конструкторов, предоставляемые классом HashTable.

№ Конструктор и описание
1 Hashtable()
Этот стандартный конструктор хэщ-таблицы, который создаёт экземпляр класса Hashtable.
2 Hashtable(int size)
Этот конструктор принимает целочисленный параметр и создаёт хэш-таблицу, имеющая начальный размер, заданный размером целочисленного значения.
3 Hashtable(int size, float fillRatio)
Это создаёт хэш-таблицу, в которой есть начальный размер, указанный в size, и коэффициент заполнения, заданный fillRatio. Этот коэффициент должен принимать значение между 0.0 и 1.0, и он определяет, насколько полной может быть хэш-таблица прежде чем она будет изменена в размерах.
4 Hashtable(Map < ? extends K, ? extends V > t)
Это построит Hashtable с указанными отображениями.


Методы
Помимо методов, определённых интерфейсом Map, Hashtable определяет следующие методы:

№ Метод и описание
1 void clear()
Сбрасывает и очищает хэш-таблицу.
2 Object clone()
Возвращает дубликат вызываемого объекта.
3 boolean contains(Object value)
Возвращает true, если некое значение равняется значению, существующему в хэш-таблице. Возвращает false, если значение не было найдено.
4 boolean containsKey(Object key)
Возвращает true, если некий ключ равняется ключу, существующему в хэш-таблице. Возвращает false, если ключ не был найден.
5 boolean containsValue(Object value)
Возвращает true, если некое значение равняется значению, существующему в хэш-таблице. Возвращает false если значение не было найдено.
6 Enumeration elements()
Возвращает перечисление значений, содержащихся в хэш-таблице.
7 Object get(Object key)
Возвращает объект, содержащий значение, связанное с ключом. Если ключ не находится в хэш-таблицы, возвращается нулевой объект.
8 boolean isEmpty()
Возвращает true, если хэш-таблица пустая; возвращает false, если она содержит хотя бы один ключ.
9 Enumeration keys()
Возвращает перечисление ключей, содержащихся в хэш-таблице.
10 Object put(Object key, Object value)
Вставляет ключ и значение в хэш-таблицу. Возвращает ноль, если ключ ещё не в хэш-таблице, возвращает предыдущее значение, связанное с ключом, если ключ уже в хэш-таблице.
11 void rehash()
Увеличивает размер хэш-таблицы и переопределяет все её ключи.
12 Object remove(Object key)
Удаляет ключ и его значение. Возвращает значение, связанное с ключом. Если ключ отсутствует в хэш-таблице, возвращается нулевой объект.
13 int size()
Возвращает количество записей в хэш-таблице.
14 String toString()
Возвращает строковый эквивалент хэш-таблицы.


Пример
Следующая программа показывает несколько методов, поддерживаемых структурой данных Hashtable в Java:

import java.util.*;
public class HashTableDemo {

public static void main(String args[]) {
// Создаёт хэш-карту
Hashtable balance = new Hashtable();
Enumeration names;
String str;
double bal;

balance.put("Маша", new Double(3434.34));
balance.put("Михаил", new Double(123.22));
balance.put("Олег", new Double(1378.00));
balance.put("Денис", new Double(99.22));
balance.put("Антон", new Double(-19.08));

// Показывает все балансы в хэш-таблицы.
names = balance.keys();

while(names.hasMoreElements()) {
str = (String) names.nextElement();
System.out.println(str + ": " + balance.get(str));
}
System.out.println();

// Вносим 1,000 в аккаунт Маши.
bal = ((Double)balance.get("Маша")).doubleValue();
balance.put("Маша", new Double(bal + 1000));
System.out.println("Новый баланс Маши: " + balance.get("Маша"));
}
}


Получим следующее:

Антон: -19.08
Маша: 3434.34
Михаил: 123.22
Денис: 99.22
Олег: 1378.0

Новый баланс Маши: 4434.34