Назад
Вперед
1.14. Словарь на базе класса Hashtable
Пример, демонстрирующий применение основных
методов класса Hashtable, представляет собой
простейший телефонный справочник. В нем имеется
несколько записей вида "имя - номер
телефона". Дополнительно в примере
используется интерфейс Enumeration, предназначенный
для извлечения элементов списка.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Немного теории
Задачу организации словаря, содержащего пары
вида "ключ - значение", можно легко
решить с помощью класса Hashtable. Этот класс
использует механизм хеш-таблиц для эффективного
поиска записей по ключу.
С помощью метода put программа добавляет новые
записи в хеш-таблицу. Извлечение записей
выполняется методом get, которому в качестве
параметра передается ключ.
В классе Hashtable также предусмотрены методы, с
помощью которых можно получить списки всех
имеющихся в хеш-таблице ключей или записей. Эти
списки возвращаются как объекты класса Enumeration.
Описание примера
Словарь, содержащий имена и телефоны, создается
в нашем примере как объект класса Hashtable:
Hashtable dictPhoneBook = new Hashtable();
Программа инициализирует словарь, добавляя в
него четыре записи:
dictPhoneBook.put("Ivanov", "322-223-228");
dictPhoneBook.put("Petrov", "326-211-227");
dictPhoneBook.put("Sidorov", "311-225-263");
dictPhoneBook.put("Ivanoff", "355-243-229");
Для добавления записей мы воспользовались
методом put. Через первый параметр этому методу
передается ключ (в нашем случае это имя), а через
второй - значение (в нашем случае это номер
телефона).
После инициализации программа отображает
список телефонов на консоли. Для этого она
вначале получает список ключей, вызывая метод keys:
Enumeration en = dictPhoneBook.keys();
Список возвращается этим методом как объект
класса Enumeration.
С помощью метода nextElement мы в цикле получаем все
значения ключей, а затем методом get извлекаем
соответствующие этим ключам значения:
while(en.hasMoreElements())
{
szStr = (String)en.nextElement();
szPhone = (String)dictPhoneBook.get(szStr);
System.out.println(szStr + ": " + szPhone);
}
Условие завершения цикла - извлечение всех
элементов из списка ключей en. Для проверки
выполнения этого условия мы вызываем метод
hasMoreElements. Если список пустой, метод возвращает
значение false.
Запись, извлеченная из списка dictPhoneBook по ключу
szStr, записывается в переменную szPhone и затем вместе
с ключом отображается на консоли.
На следующем этапе программа работает в цикле.
После ввода имени с клавиатуры она выполняет
поиск в хеш-таблице, вызывая для этого все тот же
метод get:
szPhone = (String)dictPhoneBook.get(szStr);
Он возвращает запись, соответствующую ключу,
указанному через параметр. Если запись не
найдена, метод get возвращает значение null.
Проверив результат поиска, мы либо выводим имя
и найденный номер телефона, либо строку Not found:
if(szPhone != null)
System.out.println("Name:" +
szStr + ", phone:" + szPhone);
else
System.out.println("\nNot found");
Назад Вперед |