Логический метод isEmpty() возвращает true, если в таблице нет элементов.
Как получить все элементы таблицы
Метод values()представляет все значения value таблицы в виде интерфейса Collection. Все модификации в объекте collection изменяют таблицу, и наоборот.
Метод keyset() предоставляет все ключи key таблицы в виде интерфейса set. Все изменения в объекте set корректируют таблицу, и наоборот.
Метод entrySet() представляет все пары "key — value" таблицы в виде интерфейса Set. Все модификации в объекте Set изменяют таблицу, и наоборот.
Метод toString() возвращает строку, содержащую все пары.
Метод remove (Object key) удаляет пару с ключом key, возвращая значение этого ключа, если оно есть, и null, если пара с ключом key не найдена.
Метод clear() удаляет все элементы, очищая таблицу.
Пример программы «Телефонный справочник».
importjava.util.*;
class PhoneBook{
public static void main(String[] args){
Hashtable yp = new Hashtable();
String name = null;
yp.put("John", "123-45-67");
yp.put ("Lemon", "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: Java PhoneBook Name");
}
return;
}
if (yp.containsKey(name))
System.out.println(name + "'s phone = " + yp.get(name));
else
System.out.println("Sorry, no such name");
)
}
Класс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.
Рисунок. Иерархия классов и интерфейсов-коллекций.
Примеры классов Vector, Stack, Hashtable, Properties показывают удобство классов-коллекций. Поэтому в Java 2 разработана целая иерархия коллекций. Она показана на рисунке. Справа записаны имена интерфейсов. Стрелки указывают классы, реализующие эти интерфейсы. Все коллекции разбиты на три группы, описанные в интерфейсах List, Set и Map.
Примером реализации интерфейса List может служить класс Vector, примером реализации интерфейса мар — класс Hashtable.
Коллекции List и Set имеют много общего, поэтому их общие методы объединены и вынесены в суперинтерфейс Collection.
Интерфейс collection из пакета java.util описывает общие свойства коллекций List и Set. Он содержит методы добавления и удаления элементов, проверки и преобразования элементов:
boolean add (Object obj) — добавляет элемент obj в конец коллекции; возвращает false, если такой элемент в коллекции уже есть, а коллекция не допускает повторяющиеся элементы; возвращает true, если добавление прошло удачно;
boolean addAll (Collection coll) — добавляет все элементы коллекции coll в конец данной коллекции;
void clear() — удаляет все элементы коллекции;
boolean contains (Object obj) — проверяет наличие элемента obj в коллекции;
boolean containsAll (Collection coll) — проверяет наличие всех элементов коллекции coll в данной коллекции;
boolean isEmpty() — проверяет, пуста ли коллекция;
iterator iterator () — возвращает итератор данной коллекции;
boolean remove (Object obj) — удаляет указанный элемент из коллекции; возвращает false, если элемент не найден, true, если удаление прошло успешно;
boolean removeAll (Collection coll) — удаляет элементы указанной коллекции, лежащие в данной коллекции;
boolean retainAll (Collection coll) — удаляет все элементы данной коллекции, кроме элементов коллекции coll;
int size () — возвращает количество элементов в коллекции;
Object [] toArray() — возвращает все элементы коллекции в виде массива;
Objectn toArray(Object[] a) — записывает все элементы коллекции в массив а, если в нем достаточно места.
Интерфейс List из пакета java.util, расширяющий интерфейс Collection, описывает методы работы с упорядоченными коллекциями. Иногда их называют последовательностями (sequence). Элементы такой коллекции пронумерованы, начиная от нуля, к ним можно обратиться по индексу. В отличие от коллекции Set элементы коллекции List могут повторяться.
Класс Vector — одна из реализаций интерфейса List.
Интерфейс List добавляет к методам интерфейса Collection методы, использующие индекс index элемента:
void add(int index, Object obj) — вставляет элемент obj в позицию index; старые элементы, начиная с позиции index, сдвигаются, их индексы увеличиваются на единицу;
boolean addAll(int index, Collection coll) — вставляетвсеэлементыколлекцииcoll;
Object get(int index) — возвращает элемент, находящийся в позиции index;
int indexOf(Object obj) — возвращает индекс первого появления элемента obj в коллекции;
int lastindexOf (Object obj) — возвращает индекс последнего появления элемента obj в коллекции;
Listiterator listiterator () — возвращает итератор коллекции;
Listiterator listiterator (int index) — возвращает итератор конца коллекцииот позицииindex;
Object Set (int index, Object obj) — заменяет элемент, находящийся в позиции index, элементом obj;
List subListUnt from, int to) — возвращает часть коллекции от позиции from включительно до позиции to исключительно.
Интерфейс Set из пакета java.util, расширяющий интерфейс Collection, описывает неупорядоченную коллекцию, не содержащую повторяющихся элементов. Это соответствует математическому понятию множества (Set). Такие коллекции удобны для проверки наличия или отсутствия у элемента свойства, определяющего множество. Новые методы в интерфейс Set не добавлены, просто метод add () не станет добавлять еще одну копию элемента, если такой элемент уже есть в множестве.
Этот интерфейс расширен интерфейсом SortedSet.
Интерфейс SortedSet из пакета java.util, расширяющий интерфейс Set, описывает упорядоченное множество, отсортированное по естественному порядку возрастания его элементов или по порядку, заданному реализацией интерфейса Comparator.
Элементы не нумеруются, но есть понятие первого, последнего, большего и меньшего элемента.
Дополнительные методы интерфейса отражают эти понятия:
Comparator comparator () — возвращает способ упорядочения коллекции; Object first()— возвращает первый, меньший элемент коллекции;
SortedSet headSet (Object toElement) — возвращает начальные, меньшие элементы до элемента toElement исключительно;
Object last () — возвращает последний, больший элемент коллекции;
SortedSet subSet(Object fromElement, Object toElement) — возвращает подмножество коллекции от элемента fromElement включительно до элемента toElement исключительно;
SortedSet tailSet (Object fromElement) — возвращает последние, большие элементы коллекции от элемента fromElement включительно.
Интерфейс Map из пакета java.util описывает коллекцию, состоящую из пар "ключ — значение". У каждого ключа только одно значение, что соответствует математическому понятию однозначной функции или отображения.
Такую коллекцию часто называют еще словарем (dictionary) или ассоциативным массивом (associative array).
Обычный массив — простейший пример словаря с заранее заданным числом элементов. Это отображение множества первых неотрицательных целых чисел на множество элементов массива, множество пар "индекс массива – элемент массива".
Класс HashTable — одна из реализаций интерфейса мар.
Интерфейс Map содержит методы, работающие с ключами и значениями:
boolean containsKey (Object key)— проверяетналичиеключаkey;
boolean containsValue (Object value) — проверяетналичиезначенияvalue;
Set entrySet () — представляет коллекцию в виде множества, каждый элемент которого — пара из данного отображения, с которой можно работать методами вложенного интерфейса Map.Entry;
Object get (Object key) — возвращает значение, отвечающее ключу key;
Set keySet() — представляет ключи коллекции в виде множества;
Objectput(Objectkey, Objectvalue) — добавляет пару "key— value", если такой пары не было, и заменяет значение ключа key, если такой ключ уже есть в коллекции;
void putAll (Map m) — добавляет к коллекции все пары из отображения m;
Collection values() — представляет все значения в виде коллекции.
В интерфейс Mар вложен интерфейс Map.Entry, содержащий методы работы с отдельной парой.
Интерфейс SortedMap, расширяющий интерфейс Map, описывает упорядоченную по ключам коллекцию мар. Сортировка производится либо в естественном порядке возрастания ключей, либо, в порядке, описываемом в интерфейсе Comparator.
Элементы не нумеруются, но есть понятия большего и меньшего из двух элементов, первого, самого маленького, и последнего, самого большого элемента коллекции. Эти понятия описываются следующими методами:
Comparator comparator () — возвращает способ упорядочения коллекции;
Object firstKey() — возвращает первый, меньший элемент коллекции;
SortedMap headMap(Object toKey) — возвращает начало коллекции до элемента с ключом toKey исключительно;
Object lastKey() — возвращает последний, больший ключ коллекции;
SprtedMap subMap (Object fromKey, Object toKey) —возвращает часть коллекции от элемента с ключом fromKey включительно до элемента с ключом toKey исключительно;
SortedMap tallMap (Object fromKey) — возвращает остаток коллекции от элемента fromKey включительно.
Вы можете создать свои коллекции, реализовав рассмотренные интерфейсы. Это дело трудное, поскольку в интерфейсах много методов. Чтобы облегчить эту задачу, в Java API введены частичные реализации интерфейсов — абстрактные классы-коллекции.
Эти классы лежат в пакете java.util,
Абстрактный класс AbstractGollection реализует интерфейс Collection, но оставляет нереализованными методы iterator (), size().