Класс Hashtable в Java

Java 数据结构Структуры данных 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 数据结构Структуры данных Java

Другие расширения