Хэш-таблица в Java

управление данными с помощью моделей предметной области Java Программирование и разработка

Хэш-таблица предназначена для пар ключ/значение. Внутри значения хранятся в массиве. Каждый ключ преобразуется в индекс массива. Это преобразование известно как хеширование. Это делается внутренней хэш-функцией. Другими словами, ключи не нужно хранить. Все это хэш-таблица, в java и в других компьютерных языках. В этой статье объясняются два конструктора hastable Java и его часто используемые методы.

Следующие пять строк показывают слова и их значения:

затишье : сделать кого-то расслабленным и спокойным
свет : энергия солнца
темнота : отсутствие света
папа : менее формальное слово для отца
повар : человек, чья работа готовить

Каждое слово можно считать ключом, а каждое значение можно считать значением. Этот список пар ключ/значение будет использоваться в этой статье. Класс hashtable находится в пакете java.util.*, который необходимо импортировать.

Построение общедоступной Hashtable()

Этот метод создает пустую хеш-таблицу. Следующая программа создает пустую хеш-таблицу с именем dic (для словаря), а затем дает ей пять пар ключ/значение.

    import java.util.*;
public class TheClass {
public static void main(String[] args) {
Hashtable<String, String> dic = new Hashtable<String, String>();
dic.put(«lull», «to make somebody relaxed and calm»); dic.put(«light», «the energy from the sun»);
dic.put(«darkness», «absence of light»); dic.put(«dad», «a less formal word for father»);
dic.put(«cook», «a person whose job is cooking»);
}
}

Обратите внимание, что тип ключа должен быть указан в левой и правой частях оператора конструктора. Тип значения также должен быть указан с обеих сторон. Класс Java Hashtable имеет метод put() для помещения пары ключ/значение в хеш-таблицу.

Читайте также:  Как установить VirtualBox на Ubuntu 20.04

Общедоступная хэш-таблица (Map<? extends K,? extends V> t)

Этот метод конструктора создаст хэш-таблицу из другой хэш-таблицы. Имя хеш-таблицы приведенного выше кода — dic. Другая хеш-таблица может быть создана из dic следующим образом:

            Hashtable<String, String> dic2 = new Hashtable<String, String>(dic);

Новая хеш-таблица — dic2. На данный момент у него есть все элементы (пары ключ/значение) хеш-таблицы dic.

Доступ к общедоступным парам ключ/значение V put (ключ K, значение V)

Этот метод помещает пару ключ/значение в хеш-таблицу. Он возвращает предыдущее значение указанного ключа этой хеш-таблицы или null, если у ключа не было значения. Следующий код иллюстрирует это:

            Hashtable<String, String> hshtbl = new Hashtable<String, String>();
String oldvalue1 = hshtbl.put(«blue», «having the color of the sea on a clear day»);
System.out.println(oldvalue1);
String oldvalue2 = hshtbl.put(«blue», «color of a clear sky on a clear day»);
System.out.println(oldvalue2);

Результат:

    null
having the color of the sea on a clear day

public void putAll (Map<? extends K,? extends V> t)

Этот метод помещает другую хеш-таблицу в интересующую хеш-таблицу. Возвращает пустоту. Представьте, что указанная выше хэш-таблица dic уже есть в программе. Представьте, что в программе уже есть другая хеш-таблица, dic3, со следующим содержимым:

    {«blue»=«color of a clear sky on a clear day»,
«vector»=«a course taken by an aircraft»}

Все содержимое dic3 может быть включено в dic с помощью следующего утверждения:

        dic.putAll(dic3);

public int size()

Этот метод возвращает количество ключей для хеш-таблицы. Следующий код иллюстрирует это:

            Hashtable<String, String> dic = new Hashtable<String, String>();
dic.put(«lull», «to make somebody relaxed and calm»); dic.put(«light», «the energy from the sun»);
dic.put(«darkness», «absence of light»); dic.put(«dad», «a less formal word for father»);
dic.put(«cook», «a person whose job is cooking»);

int sz = dic.size();
System.out.println(sz);

Выход 5.

public V get (ключ объекта)

Этот метод возвращает значение, до которого был хеширован указанный ключ, или null, если ключ не был хэширован до какого-либо значения (индекс массива). Следующий код иллюстрирует это:

            Hashtable<String, String> dic = new Hashtable<String, String>();
dic.put(«lull», «to make somebody relaxed and calm»); dic.put(«light», «the energy from the sun»);
dic.put(«darkness», «absence of light»); dic.put(«dad», «a less formal word for father»);
dic.put(«cook», «a person whose job is cooking»);

System.out.println(dic.get(«lull»));
System.out.println(dic.get(«light»));
System.out.println(dic.get(«vector»));

Результат:

    to make somebody relaxed and calm
the energy from the sun
null

public V remove(Object key)

Этот метод удаляет ключ и соответствующее ему значение из хеш-таблицы. Он возвращает значение для ключа или null, если ключ отсутствует. Следующий код иллюстрирует это:

            Hashtable<String, String> dic = new Hashtable<String, String>();
dic.put(«lull», «to make somebody relaxed and calm»); dic.put(«light», «the energy from the sun»);
dic.put(«darkness», «absence of light»); dic.put(«dad», «a less formal word for father»);
dic.put(«cook», «a person whose job is cooking»);

String ret1 = dic.remove(«darkness»);
String ret2 = dic.remove(«darkness»);

System.out.println(ret1);
System.out.println(ret2);

Результат:

    absence of light
null

public boolean isEmpty()

Возвращает true, если в хеш-таблице нет ключа, хэшированного в значение (индекс массива); и ложно в противном случае. Следующий код показывает, как использовать этот метод:

            Hashtable<String, String> dic4 = new Hashtable<String, String>();
boolean bl = dic4.isEmpty();
System.out.println(bl);

Вывод верный.

public void clear()

Этот метод очищает все пары ключ/значение в хеш-таблице. Размер хеш-таблицы становится равным нулю. Следующий код показывает его использование:

            Hashtable<String, String> dic5 = new Hashtable<String, String>();
dic5.put(«blue», «color of a clear sky on a clear day»);
dic5.put(«vector», «a course taken by an aircraft»);

dic5.clear();

System.out.println(dic5.size());

Выход 0.

Возврат списка из хэш-таблицы public Enumeration elements()

Этот метод возвращает перечисление значений хеш-таблицы. Класс Enumeration имеет свои методы. В следующем коде показано, как получить перечисление значений хеш-таблицы и как использовать методы перечисления для чтения значений:

            Hashtable<String, String> dic = new Hashtable<String, String>();
dic.put(«lull», «to make somebody relaxed and calm»); dic.put(«light», «the energy from the sun»);
dic.put(«darkness», «absence of light»); dic.put(«dad», «a less formal word for father»);
dic.put(«cook», «a person whose job is cooking»);

Enumeration<String> e = dic.elements();
while (e.hasMoreElements() == true) {
String str = e.nextElement();
System.out.println(str);
}

Результат:

    a person whose job is cooking
a less formal word for father
the energy from the sun
absence of light
to make somebody relaxed and calm

Обратите внимание, что порядок вывода не является порядком ввода. Вот как работает хеш-таблица в Java.

public Enumeration<K> keys()

Этот метод возвращает перечисление ключей хеш-таблицы. Класс Enumeration имеет свои методы. Следующий код показывает, как получить перечисление ключей хеш-таблицы и как использовать методы перечисления для чтения ключей:

            Hashtable<String, String> dic = new Hashtable<String, String>();
dic.put(«lull», «to make somebody relaxed and calm»); dic.put(«light», «the energy from the sun»);
dic.put(«darkness», «absence of light»); dic.put(«dad», «a less formal word for father»);
dic.put(«cook», «a person whose job is cooking»);

Enumeration<String> e = dic.keys();
while (e.hasMoreElements() == true) {
String str = e.nextElement();
System.out.println(str);

Результат:

    cook
dad
light
darkness
lull

Обратите внимание, что порядок вывода не является порядком ввода. Вот как работает хеш-таблица в Java. Ключ фактически хэшируется в индекс (число) массива, содержимое ячейки которого является значением.

public Set<Map.Entry<K,V>> entrySet()

Этот метод возвращает набор пар ключ/значение в хэш-таблице. В следующем коде показано, как обрабатывать возвращаемый набор пар ключ/значение и как распечатать все пары ключ/значение:

            Hashtable<String, String> dic = new Hashtable<String, String>();
dic.put(«lull», «to make somebody relaxed and calm»); dic.put(«light», «the energy from the sun»);
dic.put(«darkness», «absence of light»); dic.put(«dad», «a less formal word for father»);
dic.put(«cook», «a person whose job is cooking»);

Set<Map.Entry<String,String>> c = dic.entrySet();
Iterator<Map.Entry<String,String>> iter = c.iterator();
while (iter.hasNext() == true) {
Map.Entry<String,String> kv = iter.next();
System.out.println(kv.getKey() + «: « + kv.getValue());
}

Результат:

    cook: a person whose job is cooking
dad: a less formal word for father
light: the energy from the sun
darkness: absence of light
lull: to make somebody relaxed and calm

Хотя соответствующие значения ключей сохранены, порядок вывода не совпадает с порядком ввода. Вот как работает хеш-таблица в Java.

Преобразование набора пар ключ/значение в строку public String toString()

Этот метод преобразует все пары ключ/значение хеш-таблицы в одну длинную строку. Неважно, если бы типы ключей или значений не были строками. Это иллюстрируется следующим кодом:

            Hashtable<String, Integer> ht = new Hashtable<String, Integer>();
ht.put(«ten», 10);
ht.put(«twenty», 20);
ht.put(«thirty», 30);

String str = ht.toString();
System.out.println(str);

Результат:

    {twenty=20, ten=10, thirty=30}

Заключение

Хэш-таблица — это карта пар ключ/значение. Внутри ключ фактически хэшируется в индекс массива. Значение этого индекса является значением пары ключ/значение. Hashtable — это класс в пакете java.util.*, который следует импортировать до того, как можно будет использовать его построение и другие методы

Оцените статью
bestprogrammer.ru
Добавить комментарий