yp.put("Lennon", "567-34-12");
yp.put("Bill", "342-65-87");
yp.put("Gates", "423-83-49");
yp.put("Batman", "532-25-08");
try{
name = args[0];
}catch(Exception e){
System.out.println("Usage: j ava PhoneBook Name"); return;
}
if (yp.containsKey(name))
System.out.println(name + "’s phone = " + yp.get(name));
else
System.out.println("Sorry, no such name");
}
}
Рис. 6.1. Работа с телефонной книгой |
Класс
Класс Properties расширяет класс Hashtable таким образом, что в нем хранятся пары ссылок не на произвольный тип, а на строки — пары типа String. Он предназначен в основном для работы с парами "свойства системы — их значения", записанными в файлах свойств.
В классе Properties два конструктора:
□ Properties () — создает пустой объект;
□ Properties (Properties default) — создает объект с заданными парами свойств default.
Кроме унаследованных от класса Hashtable методов в классе Properties есть еще следующие методы:
□ два метода, возвращающих значение ключа-строки в виде строки:
• String getProperty(String key) — возвращает значение по ключу key;
• String getProperty(String key, String defaultValue) — возвращает значение по ключу key; если такого ключа нет, возвращается defaultValue;
□ метод setProperty(String key, String value) добавляет новую пару, если ключа key нет, и меняет значение, если ключ key есть;
□ метод load(inputStream in) загружает свойства из входного потока in;
□ методы list (PrintStream out) и list(PrintWriter out) выводят свойства в выходной поток out;
□ метод store (OutputStream out, String header) выводит свойства в выходной поток out с заголовком header.
Очень простой листинг 6.4 и рис. 6.2 демонстрируют вывод всех системных свойств Java.
class Prop{
public static void main(String[] args){
System.getProperties().list(System.out);
}
}
Рис. 6.2. Системные свойства |
Примеры классов Vector, Stack, Hashtable, Properties показывают удобство классов-коллекций. Такое удобство и необходимость в коллекциях разных видов привели к тому, что для Java была разработана целая иерархия коллекций, получившая название Java Collections Framework. Она показана на рис. 6.3. Курсивом записаны имена интерфейсов. Пунктирные линии указывают классы, реализующие эти интерфейсы.
Все коллекции разбиты на четыре группы, описанные в интерфейсах List, Set, Queue и Map.
Примером реализации интерфейса List может служить описанный ранее класс Vector, примером реализации интерфейса Map — класс Hashtable.
Коллекции List, Set и Queue имеют много схожего, поэтому их общие методы вынесены в отдельный суперинтерфейс Collection.
Object
—AbstractCollection
—AbstractList Ч- - - - ^
^Vector
L Stack
—AbstractSet 4----- = = -
—HashSet
L LinkedHashSet
_ TreeSet __
—AbstractQueue -4- ----- -
- ConcurrentLinkedQueue
- DelayQueue
- LinkedBlockingQueue
- PriorityBlockingQueue
- PriorityQueue n
^LinkedBlockingDeque
_ ArrayDeque
Рис. 6.3. Иерархия классов и интерфейсов-коллекций
Интерфейс Map не входит в эту иерархию — по мнению разработчиков Java Collections Framework, отображения типа Map не являются коллекциями. Они показаны на рис. 6.4.
Object
-AbstractMap -4- — — — HashMap
L- LinkedHashMap -4-WeakHashMap —TreeMap _
-Arrays
Bitset ^
Collections
Dictionary — Hashtable — Properties
Рис. 6.4. Иерархия классов и интерфейсов-отображений
Все интерфейсы, входящие в Java Collections Framework, — настраиваемые
Посмотрим, что, по мнению разработчиков Java API, должно содержаться в этих коллекциях.
Интерфейс
Интерфейс Collection из пакета java.util описывает общие свойства коллекций List, Set и Queue. Он содержит методы добавления и удаления элементов, проверки и преобразования элементов:
□ boolean add (Obj ect obj) — добавляет элемент obj в конец коллекции; возвращает false, если такой элемент в коллекции уже есть, а коллекция не допускает повторяющиеся элементы; возвращает true, если добавление прошло удачно;
□ boolean addAll(Collection coll) - добавляет все элементы коллекции coll в конец
данной коллекции;
□ void clear () — удаляет все элементы коллекции;
□ boolean contains(Object obj) — проверяет наличие элемента obj в коллекции;
□ boolean containsAll(Collection coll) — проверяет наличие всех элементов коллекции coll в данной коллекции;