Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Базовые типы

Замещающие типы
Без указателей
Массивы
Структурное программи-
рование

Обработка исключений
Возбуждение исключений
Классы обработки исключений
Блок finally
Строки String
Класс Math
Класс Vector
Класс Stack
Словарь на базе Hashtable
Словарь на базе Properties
Цифровые часы
Собственный класс
Наследование классов

Интерфейсы

Назад Вперед

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"); 

Назад Вперед

[Назад]