Объектно-ориентированное программирование. Collections Framework. (Занятие 7) презентация

Содержание

Слайд 1Collections Framework
Занятие 7


Слайд 2План лекции
Collection Framework
Типы коллекций
Параметризованные типы
Параметризованные методы
Автоупаковка/автораспаковка


Слайд 3Коллекции
Коллекции (контейнеры) – хранилища, поддерживающие разнообразные способы накопления и упорядочивания объектов с

целью обеспечения возможностей эффективного доступа к ним
В Java коллекции разделены на интерфейсы, абстрагирующие общие принципы работы с коллекциями, и классы, реализующие конкретную функциональность
Не все методы, заявленные в интерфейсах, должны в действительности реализовываться классами. Часть методов может просто выбрасывать исключение UnsupportedOperationException

Слайд 4Интерфейс Collection
Является образующим для интерфейсов коллекций
Определяет базовую функциональность любой коллекции
Подразумевает добавление,

удаление, выбор элементов в коллекции
Допускает дубликаты и пустые элементы

Слайд 5Методы интерфейса Collection
Добавление элементов boolean add(Object o), boolean addAll(Collection c)
Исключение элементов boolean

remove(Object o), boolean removeAll(Collection c), boolean retainAll(Collection c), void clear()
Состояние коллекции boolean contains(Object o), boolean containsAll(Collection c), boolean isEmpty(), int size()
Вспомогательные методы Object[] toArray(), Iterator iterator()

Слайд 6Интерфейс Set
Расширяет интерфейс Collection
Не разрешает наличие дубликатов
Допускается наличие только одной ссылки

null
Объекты коллекции должны корректно реализовывать метод equals()

Слайд 7Интерфейс List
Расширяет интерфейс Collection
Подразумевает хранение упорядоченной последовательности объектов
Порядок хранения определяется порядком

добавления элементов
Позволяет обращаться к элементам по их номеру

Слайд 8Специальные методы интерфейса List
Адресное добавление void add(int index, Object o), boolean

addAll(int index, Collection c)
Адресные операции с элементами Object get(int index), Object set(int index, Object o), Object remove(int index)
Операции поиска int indexOf(Object o), int lastIndexOf(Object o)
Специальные операции List subList(int from, int to), ListIterator listIterator()

Слайд 9Интерфейс Iterator
Позволяет работать с коллекцией как с набором (серией) элементов:
Получать следующий

объект Object next()
Проверять наличие следующего объекта boolean hasNext()
Исключать объект из коллекции void remove()

Слайд 10Интерфейс Map
Не расширяет интерфейс Collection
Подразумевает хранение набора объектов парами ключ/значение
Ключи должны

быть уникальными
Порядок следования пар ключ/значение не определен
Имеет расширение SortedMap, требующее упорядоченности по значениям ключей

Слайд 11Методы интерфейса Map
Добавление объектов Object put(Object key, Object value), void putAll(Map t)
Исключение

объектов Object remove(Object key), void clear()
Доступ к объекту по ключу Object get(Object key)
Состояние boolean containsValue(Object value), boolean containsKey(Object key), int size(), boolean isEmpty()
Преобразование типа Set entrySet(), Set keySet(), Collection values()

Java Map


Слайд 12Некоторые классы коллекций
Динамические массивы ArrayList (List), Vector (List)

Двухсвязный список LinkedList (List)

Упорядоченные множество и

карта TreeSet (Set), TreeMap (StoredMap)

Ряд других классов HashMap (Map), HashSet (Set)

Слайд 13Класс Collections
Содержит ряд статических методов прикладного назначения, позволяющих оперировать объектами коллекций

Группы

методов:
Создание и поддержка оберток коллекций
Прочие прикладные методы

Слайд 14Обертки коллекций
Синхронизированные
Обеспечивают механизмы синхронизации доступа для многопоточных приложений
List synchronizedList(List l), …

Неизменяемые
Запрещают

использование методов модификации значений
Map unmodifiableMap(Map m), …

Слайд 15Прикладные методы
Методы поиска минимума и максимума min(), max()
Работа со списками reverse(), shuffle(), fill(),

copy(), nCopies()
Сортировка списков sort()
Поиск элементов в списке binarySearch()
Прочие прикладные методы

Слайд 16Обновленные коллекции (Java 5)
Все интерфейсы коллекций стали параметризованными
Включая итераторы!
Все классы коллекций

стали параметризованными
Обновился класс java.util.Collections
Прежние методы модифицированы для работы с параметризованными типами
Появились новые методы
Появился новый тип оболочек (Checked), динамически обеспечивающих безопасность типов при работе с коллекцией

Слайд 17Параметризованные типы
Параметризованные типы (настраиваемые типы, generic types)
Позволяют создавать классы, интерфейсы и

методы, в которых тип обрабатываемых данных задается как параметр
Позволяют создавать более компактный код, чем универсальные (обобщенные) типы, использующие ссылки типа Object
Обеспечивают автоматическую проверку и приведение типов
Позволяют создавать хороший, годный повторно используемый код

Слайд 18Скромный пример
Пример класса




Пример использования
class Generic {
T obj;
Generic(T o) {obj

= o;}
T getObj() {return obj;};
}

Generic iObj;
iObj = new Generic(33);
int i = iObj.getObj() + 10;


Слайд 19Особенности параметризованных типов
Использовать примитивные типы в качестве параметров-типов нельзя

Если одинаковые настраиваемые

типы имеют различные аргументы, то это различные типы

Обеспечивается более жесткий контроль типов на стадии компиляции

Слайд 20Общий синтаксис
Объявление настраиваемого типа
class имяКласса {...}


Создание ссылки и объекта настраиваемого типа
имяКласса

имяПеременной = new имяКласса<список-фактических-параметров>(список-аргументов);

class Generic2 {...}

Generic2 gObj = new
Generic2(10, "ok");


Слайд 21Ограниченные типы
Ограничение типа позволяет использовать у ссылок методы и поля, доступные

в типе-ограничителе
Типы, не наследующие от указанного, не могут быть использованы при создании объектов
Как имя типа может быть указан интерфейс!!!
Как имя типа может быть указан ранее введенный параметр!!!

class Stats {
T[] nums;
Stats(T[] o) {nums = o;}
double average() {
double sum = 0.0;
for(int i = 0; i < nums.length; i++)
sum += nums[i].doubleValue();
return sum / nums.length;
}
}

class Generic3> {...}


Слайд 22Метасимвольный аргумент
Что делать при передаче экземпляров параметризованных типов в методы, т.е.

как писать сигнатуру?
Для этого используется метасимвол, обозначающий произвольный тип-параметр

class Generic {
...
boolean compare(Generic o) {
return o.getObj() == obj;
}


Слайд 23Метасимвол с ограничениями
Ограничение сверху

sub не допускается

Слайд 24Параметризованные методы
Методы могут иметь собственные типы-параметры
Фактические аргументы, передаваемые в формальные аргументы,

имеющие тип-параметр, будут проверяться на соответствие типу, причем на этапе компиляции
Пример метода





Пример использования

public static > T min(T[] v) {
T min = v[0];
for (int i = 1; i < v.length; i++)
if (min.compareTo(v[i]) > 0)
min = v[i];
return min;
}

System.out.println(min(new Integer[] {10, 15, 5}));


Слайд 25Ряд особенностей
Конструкторы могут быть параметризованными (даже если сам класс таковым не

является)
Интерфейсы могут быть параметризованными
Нельзя создавать объекты, используя типы-параметры
Статические члены класса не могут использовать его типы-параметры
Настраиваемый класс не может расширять класс Throwable
От настраиваемых типов можно наследовать, есть ряд особенностей

Слайд 26Ряд особенностей
Нельзя создать массив типа-параметра





Массивов элементов конкретной версии параметризованного типа не

бывает

class Generic {
T[] vals; //OK

Generic(T[] nums) {
//vals = new T[10]; //Не есть правильно!
vals = nums; //OK
}
}

//Generic[] gens = ew Generic[10];//Nicht OK
Generic[] gens = new Generic[10];


Слайд 27И как же это работает?
Механизм стирания
В реальном байт-коде никаких настраиваемых типов

в целом-то и нет…
Информация о настраиваемых типах удаляется на стадии компиляции
Именно компилятор осуществляет контроль безопасности приведения типов
А внутри после компиляции все те же «обобщенные» классы, явные приведения типов и прочее, и прочее…

Слайд 28Ошибки неоднозначности
«Логически правильный» код





Оказывается неверным с точки зрения компилятора


И это –

самый простой пример…

public class Test {
T first(T[] arr) {
return arr[0];
}
Object first(Object[] arr) {
return arr[0];
}
}

Test.java:6: first(T[]) is already defined in Test
Object first(Object[] arr) {
^


Слайд 29Автоупаковка и автораспаковка
Автоупаковка – процесс автоматической инкапсуляции данных простого типа в

экземпляр соответствующего ему класса-обертки в случаях, когда требуется значение ссылочного типа
Автораспаковка – процесс автоматического извлечения примитивного значения из объекта-упаковки в случаях, когда требуется значение примитивного типа

List list = new LinkedList();
list.add(1);
int b = (Integer)list.get(0) + 10;


Слайд 30Особенности автоупаковки
Происходит при присваивании, вычислении выражений и при передаче параметров
Объекты создаются

без использования ключевого слова new

Объекты создаются!
Автоупаковка требует существенных ресурсов
Злоупотреблять автоупаковкой вообще не стоит!

Integer i = 15;


Слайд 31Спасибо за внимание!


Слайд 32Дополнительные источники
Арнолд, К. Язык программирования Java [Текст] / Кен Арнолд, Джеймс

Гослинг, Дэвид Холмс. – М. : Издательский дом «Вильямс», 2001. – 624 с.
Вязовик, Н.А. Программирование на Java. Курс лекций [Текст] / Н.А. Вязовик. – М. : Интернет-университет информационных технологий, 2003. – 592 с.
Хорстманн, К. Java 2. Библиотека профессионала. Том 1. Основы [Текст] / Кей Хорстманн, Гари Корнелл. – М. : Издательский дом «Вильямс», 2010 г. – 816 с.
Хорстманн, К. Java 2. Библиотека профессионала. Том 2. Тонкости программирования [Текст] / Кей Хорстманн, Гари Корнелл. – М. : Издательский дом «Вильямс», 2010 г. – 992 с.
Эккель, Б. Философия Java [Текст] / Брюс Эккель. – СПб. : Питер, 2011. – 640 с.
JavaSE at a Glance [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/overview/index.html, дата доступа: 21.10.2011.
JavaSE APIs & Documentation [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/documentation/api-jsp-136079.html, дата доступа: 21.10.2011.

Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика