Чтение онлайн

на главную - закладки

Жанры

Программирование на Java
Шрифт:

TestObserver o1 = new TestObserver("Observer 1");

TestObserver o2 = new TestObserver("Observer 2");

to.addObserver(o1);

to.addObserver(o2);

to.modify;

to.notifyObservers("Notify argument");

}

}

Пример 14.13.

В результате работы на консоль будет выведено:

Called update of Observer 2 from Observable with argument Notify argument

Called update of Observer 1 from Observable with argument Notify argument

Пример 14.14.

На практике использовать Observer не всегда

удобно, так как в Java отсутствует множественное наследование и Observer необходимо наследовать в самом начале построения иерархии классов. Как вариант, можно предложить определить интерфейс, задающий функциональность, сходную с Observer, и реализовать его в подходящем классе.

Коллекции

Зачастую в программе работа идет не с одним объектом, а с целой группой более или менее однотипных экземпляров (например, автопарк организации). Проще всего сделать это с помощью массивов. Однако, несмотря на то, что это достаточно эффективное решение для многих случаев, оно имеет некоторые ограничения. Так, обращаться к элементу массива можно только по его номеру (индексу). Также необходимо заранее задать длину массива и больше ее не менять.

Массивы существовали в Java изначально. Кроме того, было определено два класса для организации более эффективной работы с наборами объектов: Hashtable и Vector. В JDK 1.2 набор классов, поддерживающих работу с коллекциями, был существенно расширен.

Существует несколько различных типов классов-коллекций. Все они разрабатывались, по возможности, в соответствии с единой логикой и определенными интерфейсами и там, где это возможно, работа с ними унифицирована. Однако все коллекции отличаются внутренними механизмами хранения, скоростью доступа к элементам, потребляемой памятью и другими деталями. Например, в некоторых коллекциях объекты (также называемые элементами коллекций), могут быть упорядочены, в некоторых - нет. В некоторых типах коллекций допускается дублирование ссылок на объект, в некоторых - нет. Далее мы рассмотрим каждый из классов-коллекций.

Классы, обеспечивающие манипулирование коллекциями объектов, объявлены в пакете java.util.

Интерфейсы

Интерфейс Collection

Данный интерфейс является корнем всей иерархии классов-коллекций. Он определяет базовую функциональность любой коллекции - набор методов, которые позволяют добавлять, удалять, выбирать элементы коллекции. Классы, которые реализуют интерфейс Collection, могут содержать дубликаты и пустые ( null ) значения.

AbstractCollection, как абстрактный класс, служит основой для создания конкретных классов коллекций и содержит реализацию некоторых методов, определенных в интерфейсе Collection.

Интерфейс Set

Классы, которые реализуют этот интерфейс, не допускают наличия дубликатов. В коллекции этого типа разрешено наличие только одной ссылки типа null. Интерфейс Set расширяет интерфейс Collection, таким образом, любой класс, имплементирующий Set, реализует все методы, определенные в Collection. Любой объект, добавляемый в Set, должен реализовать метод equals, чтобы его можно было сравнить с другими.

AbstractSet, являясь абстрактным классом, представляет собой основу для реализации различных вариантов интерфейса Set.

Интерфейс List

Классы, реализующие этот

интерфейс, содержат упорядоченную последовательность объектов (объекты хранятся в том порядке, в котором они были добавлены). В JDK 1.2 был переделан класс Vector, так, что он теперь реализует интерфейс List. Интерфейс List расширяет интерфейс Collection, и любой класс, имплементирующий List, реализует все методы, определенные в Collection, и в то же время вводятся новые методы, которые позволяют добавлять и удалять элементы из списка. List также обеспечивает ListIterator, который позволяет перемещаться как вперед, так и назад по элементам списка.

AbstractList, как абстрактный класс, представляет собой основу для реализации различных вариантов интерфейса List.

Рис. 14.1. Основные типы для работы с коллекциями.

Интерфейс Map

Классы, которые реализуют этот интерфейс, хранят неупорядоченный набор объектов парами ключ/значение. Каждый ключ должен быть уникальным. Hashtable после модификации в JDK 1.2 реализует интерфейс Map. Порядок следования пар ключ/значение не определен.

Интерфейс Map не расширяет интерфейс Collection. AbstractMap, будучи абстрактным классом, представляет собой основу для реализации различных вариантов интерфейса Map.

Интерфейс SortedSet

Этот интерфейс расширяет Set, требуя, чтобы содержимое набора было упорядочено. Такие коллекции могут содержать объекты, которые реализуют интерфейс Comparable, либо могут сравниваться с использованием внешнего Comparator.

Интерфейс SortedMap

Этот интерфейс расширяет Map, требуя, чтобы содержимое коллекции было упорядочено по значениям ключей.

Интерфейс Iterator

В Java 1 для перебора элементов коллекции использовался интерфейс Enumeration. В Java 2 для этих целей должны применяться объекты, которые реализуют интерфейс Iterator. Все классы, которые реализуют интерфейс Collection, должны реализовать метод iterator, который возвращает объект, реализующий интерфейс Iterator. Iterator весьма похож на Enumeration, с тем лишь отличием, что в нем определен метод remove, который позволяет удалить объект из коллекции, для которой Iterator был создан.

Таким образом, подводя итог, перечислим интерфейсы, используемые при работе с коллекциями:

java.util.Collection

java.util.Set

java.util.List

java.util.Map

java.util.SortedSet

java.util.SortedMap

java.util.Iterator

Aбстрактные классы, используемые при работе с коллекциями

java.util.AbstractCollection - данный класс реализует все методы, определенные в интерфейсе Collection, за исключением iterator и size, так что для того, чтобы создать немодифицируемую коллекцию, нужно переопределить эти методы. Для реализации модифицируемой коллекции необходимо еще переопределить метод public void add(Object o) (в противном случае при его вызове будет возбуждено исключение UnsupportedOperationException ).

Поделиться:
Популярные книги

"Фантастика 2024-147".Компиляция. Книги 1-28

Погуляй Юрий Александрович
Фантастика 2024. Компиляция
Фантастика:
фэнтези
боевая фантастика
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Фантастика 2024-147.Компиляция. Книги 1-28

Разговоры запросто

Роттердамский Эразм
Научно-образовательная:
философия
5.00
рейтинг книги
Разговоры запросто

Сюжет

Синицын Олег Геннадьевич
Фантастика:
научная фантастика
5.75
рейтинг книги
Сюжет

Выбор Шивы

Вебер Дэвид Марк
1. Галактический шторм
Фантастика:
научная фантастика
5.40
рейтинг книги
Выбор Шивы

Калейдоскоп.В Игре брода нет(Водовороты Игры)

Пешкова Наталья
2. Калейдоскоп. Все грани Игры
Фантастика:
фэнтези
7.14
рейтинг книги
Калейдоскоп.В Игре брода нет(Водовороты Игры)

Перстень Левеншельдов (сборник)

Лагерлёф Сельма
Проза:
классическая проза
5.00
рейтинг книги
Перстень Левеншельдов (сборник)

Далекие горизонты (сборник)

Ле Гуин Урсула Кребер
Фантастика:
фэнтези
научная фантастика
космическая фантастика
5.00
рейтинг книги
Далекие горизонты (сборник)

#Бояръ-Аниме. Газлайтер. Том 13

Володин Григорий Григорьевич
13. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
фэнтези
7.33
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 13

Том 2. Рассказы 60-х годов

Шукшин Василий Макарович
2. Собрание сочинений в шести томах
Проза:
советская классическая проза
5.00
рейтинг книги
Том 2. Рассказы 60-х годов

Рубеж. Пентакль

Дяченко Марина и Сергей
6. Большая серия русской фантастики
Фантастика:
научная фантастика
7.00
рейтинг книги
Рубеж. Пентакль

Локки 5. Потомок бога

Решетов Евгений Валерьевич
5. Локки
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Локки 5. Потомок бога

Кодекс Охотника. Книга XXVII

Винокуров Юрий
27. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXVII

Тёмный Лорд Поттер

The Santi
Проект «Поттер-Фанфикшн»
Фантастика:
фэнтези
городское фэнтези
5.00
рейтинг книги
Тёмный Лорд Поттер

Разные дни войны. Дневник писателя, т.2. 1942-1945 годы

Симонов Константин Михайлович
Документальная литература:
публицистика
6.25
рейтинг книги
Разные дни войны. Дневник писателя, т.2. 1942-1945 годы