Класс Hashtable в Java
Hashtable является частью оригинального java.util и представляет собой конкретную реализацию Dictionary.
Однако Hashtable, переработанный в Java 2, реализует интерфейс Map, поэтому теперь Hashtable интегрирован в каркас коллекций. Он очень похож на класс HashMap, но поддерживает синхронизацию.
Как и HashMap, Hashtable хранит пары ключ/значение в хеш-таблице. При использовании хеш-таблицы вы указываете объект, который будет использоваться в качестве ключа, и значение, которое нужно связать с этим ключом.
Затем ключ хешируется, и полученный хеш-код используется в качестве индекса значения, хранящегося в таблице.
Hashtable определяет четыре конструктора. Первый — конструктор по умолчанию:
Hashtable()
Второй конструктор создает хеш-таблицу с указанным размером:
Hashtable(int size)
Третий конструктор создает хеш-таблицу с указанным размером и задает коэффициент заполнения через fillRatio.
Коэффициент заполнения должен находиться в диапазоне от 0.0 до 1.0 и определяет, насколько заполненной может стать хеш-таблица до ее изменения размера:
Hashtable(int size,float fillRatio)
Четвертый конструктор создает хеш-таблицу, инициализированную элементами из M.
Ёмкость хеш-таблицы устанавливается равной удвоенному размеру M.
Hashtable(Map m)
В дополнение к методам, определённым в интерфейсе Map, Hashtable определяет следующие методы:
| Нет. | Описание метода |
|---|---|
| 1 |
void clear( ) Очищает эту хеш-таблицу так, чтобы она не содержала ключей. |
| 2 |
Object clone( ) Создаёт поверхностную копию этой хеш-таблицы. |
| 3 |
boolean contains(Object value) Проверяет, связан ли ключ с указанным значением в этой хеш-таблице. |
| 4 |
boolean containsKey(Object key) Проверяет, является ли указанный объект ключом в этой хеш-таблице. |
| 5 |
boolean containsValue(Object value) Возвращает true, если этот Hashtable сопоставляет этому значению один или несколько ключей. |
| 6 |
Enumeration elements( ) Возвращает перечисление значений в этой хеш-таблице. |
| 7 |
Object get(Object key) Возвращает значение, с которым сопоставлен указанный ключ, или null, если это отображение не содержит сопоставления для ключа. Точнее, если это отображение содержит сопоставление ключа k значению v, удовлетворяющее (key.equals(k)), то этот метод возвращает v; в противном случае он возвращает null. |
| 8 |
boolean isEmpty( ) Проверяет, не содержит ли эта хеш-таблица ключей, сопоставленных значениям. |
| 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, которое представляет собой набор записей, заключённых в фигурные скобки и разделённых символами ASCII ', ' (запятая и пробел). |
Пример
Следующая программа демонстрирует несколько методов, поддерживаемых этой структурой данных:
import java.util.*;
public class HashTableDemo {
public static void main(String args[]) {
// Create a hash map
Hashtable balance = new Hashtable();
Enumeration names;
String str;
double bal;
balance.put("Zara", new Double(3434.34));
balance.put("Mahnaz", new Double(123.22));
balance.put("Ayan", new Double(1378.00));
balance.put("Daisy", new Double(99.22));
balance.put("Qadir", new Double(-19.08));
// Show all balances in hash table.
names = balance.keys();
while(names.hasMoreElements()) {
str = (String) names.nextElement();
System.out.println(str + ": " +
balance.get(str));
}
System.out.println();
// Deposit 1,000 into Zara's account
bal = ((Double)balance.get("Zara")).doubleValue();
balance.put("Zara", new Double(bal+1000));
System.out.println("Zara's new balance: " +
balance.get("Zara"));
}
}
Результат компиляции и запуска приведенного выше примера выглядит следующим образом:
Qadir: -19.08 Zara: 3434.34 Mahnaz: 123.22 Daisy: 99.22 Ayan: 1378.0 Zara's new balance: 4434.34
Другие расширения
Структуры данных Java