Интерфейс SortedSet и интерфейс Comparator
Интерфейс SortedSet описывает множество, элементы которого могут быть упорядочены по некоторому принципу, например в соответствии с естественным порядком его элементов. Элементы множества не проиндексированы, но существует понятие большего и меньшего элемента.
first() и last() возвращают первый и последний элементы множества.
subSet(Object fromElement, Object toElement) возвращает подмножество упорядоченного множества, содержащее элементы, большие fromElement (включая его самого) и меньше toElement. У этого метода есть две простые разновидности headSet(Object toElement) и tailSet(Object fromElement), возвращающие подмножество, состоящее из всех элементов, меньших и больших данного соответственно.
Способ упорядочения элементов описывает интерфейс Comparator. Он имеет два метода:
compare(Object obj1, Object obj2) – возвращает отрицательное число, если obj1 считается меньшим obj2, ноль, если они равны и положительное число, если obj1 больше obj2
equals(Object obj1, Object obj2) – возвращает true, если объекты считаются равными
Можно создать свой собственный способ сравнения элементов, написав класс, реализующий интерфейс Comparator и переопределив методы compare() и equals(). Класс TreeSet, например, имеет конструктор с параметром типаComparator, в который можно передать объект этого нового класса. В результате элементы множества будут отсортированы угодным нам способом.
Ассоциативные массивы
Понятие ассоциативного массива
Ассоциативный массив – это набор пар элементов. Каждая пара содержит ключ и значение, причем ключи не повторяются. В любой момент можно получить элемент-значение, ассоциированный (находящийся в паре) с заданным ключом. Ассоциативный массив также называют словарем или отображением.
В виде ассоциативного массива удобно хранить, например, строку, полученную из базы данных. Ключом будет название столбца, а значением – значение этого столбца для полученной строки.
Можно воспринимать ассоциативный массив как разновидность обычного массива, в котором индексы могут быть не только целыми числами, а произвольными объектами.
Интерфейс Map
Интерфейс Map содержит методы для работы с ассоциативным массивом:
size() – возвращает количество элементов (пар) в массиве;
containsKey(Object key) – проверяет, существует ли в массиве элемент с ключом key;
containsValue(Object value) – проверяет, существует ли в массиве элемент со значением value;
get(Object key) – возвращает значение, соответствующее ключу key;
put(Object key, Object value) – добавляет в массив элемент с ключом key и значением value. Если элемент с таким ключом уже существует в массиве, то его значение просто изменяется;
values() – возвращает значения всех элементов массива в виде коллекции (т.е. возвращаемый результат имеет тип Collection);
remove(Object key) – удаляет элемент с ключом key, возвращая значение этого элемента (если он есть) и null, если такого элемента не было;
clear() – очищает массив;
isEmpty() – проверяет, не пуст ли массив.
Каждый элемент ассоциативного массива, описываемого интерфейсом Map, имеет интерфейсный тип Map.Entry, который предоставляет три основных метода:
getKey() – возвращает ключ элемента;
getValue() – возвращает значение элемента;
setValue(Object value) – меняет значение элемента.
Метод entrySet(), определенный в интерфейсе Map, позволят получить все элементы ассоциативного массива в виде множества объектов типа Map.Entry.
Класс Hashtable
Класс Hashtable – одна из реализаций интерфейса Map.
Hashtable, как и Vector, кроме размера имеет емкость (размер буфера, выделенного под элементы массива). Помимо этого он характеризуется показателем загруженности – долей буфера, после заполнения которой емкость автоматически увеличивается. Конструктор Hashtable() без параметров создает пустой объект с емкостью в 101 элемент и показателем загруженности 0.75. Чтобы задать начальную емкость и показатель загруженности, следует воспользоваться конструктором с двумя параметрами Hashtable(int capacity, float loadFactor).
Hashtable имеет наследника – класс Properties, который вместо пар произвольных объектов хранит пары строк. Если в конкретной задаче и ключи и значения элементов ассоциативного массива должны иметь тип String (а это бывает довольно часто), удобнее воспользоваться классом Properties – не надо будет делать постоянное приведение типов.
В классе Properties определены методы getProperty(String key) и setProperty(String key, String value), работающие аналогично методам get() и put(), но принимающие параметры типа String.
Дата добавления: 2017-01-26; просмотров: 1123;