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() Возвращает строковый эквивалент хэш-таблицы. |
Пример
Следующая программа показывает несколько методов, поддерживаемых этой структурой данных:
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