01_OOP_DSA_COLLECTIONS.pptx
- Количество слайдов: 30
Java Lecture #1 Intro DSA Collections Voronezh, 2012
Жизненный цикл программы на Java 2
Парадигмы программирования • • • Процедурное программирование Структурное программирование модульное программирование …. Объектно-ориентированное программирование 3
Объектно-ориентированное программирование • Программа – взаимодействие объектов, компонентов, отсылка и обработка событий. 4
Объект: состояние, поведение, уникальность 5
Объекты и классы 6
Принципы ООП 7
Принципы ООП 8
Принципы ООП 9
Классы и экземпляры 10
Коллекции объектов • Массивы • Классы контейнеры пакета java. util. * 11
Массивы • • • данные помещаются последовательно в специально отведенную для этого область памяти Данные в массиве должны быть одного типа, а значит и размера Позволяет легко узнать адрес в памяти по которому хранится нужные элемент (в массивах Java объекты не хранятся, хранятся лишь указатели на объекты) данные помещаются последовательно в специально отведенную для этого область памяти время обращения к произвольному элементу массива постоянное 12
Коллекции • Коллекции (контейнеры) – хранилища, поддерживающие разнообразные способы накопления и упорядочивания объектов с целью обеспечения возможностей эффективного доступа к ним • В Java коллекции разделены на интерфейсы, абстрагирующие общие принципы работы с коллекциями, и классы, реализующие конкретную функциональность • Не все методы, заявленные в интерфейсах, должны в действительности реализовываться классами. Часть методов может просто выбрасывать исключение Unsupported. Operation. Exception 13
Классы и интерфейсы коллекций 14
Основные концепции • • List
Реализации интерфейса List Array. List - динамический вариант массивов: • неэффективны в операциях вставки-удаления элементов --> Vector - альтернатива Array. List: • все методы синхронизированы Linked. List – массив хранит каждый объект как отдельное звено, в каждом из которых находится ссылка на следующее/предыдущее звено последовательности. Linked. List link 16
Collection extends Iterable Итератор Iterator
Реализация Implementation Hash Table Inter Set face List s Map Resizable Array Hash. Set Balanced Tree. Set Array. List Hash. Map Linked List Hash Table + Linked List Linked. Hash. Set Linked. List Tree. Map Linked. Hash. Map 18
Types of Collections. Sorting and ordering. 19
Задание порядка в Java • интерфейс Comparable • интерфейс Comparator 20
Sorting with java. lang. Comparable § § Для поддержки сортировки в Java Collections используется интерфейс Comparable, который реализуют стандартные типы данных. Чтобы сравнивать объекты необходимо реализовать метод compare. To(Object), который возвращает: 0 – если объекты равны > 0 – если this больше < 0 – если this меньше ü sgn(x. compare. To(y)) == -sgn(y. compare. To(x)) ü (x. compare. To(y) > 0 && y. compare. To(z) > 0) -> x. compare. To(z)>0 ü x. compare. To(y)==0 -> sgn(x. compare. To(z)) == sgn(y. compare. To(z)) 21
Comparable example Integer extends Number implements Comparable
Sorting with Java. util. Comparator § § Также можно сравнивать объекты с помошью внешнего объекта, не изменяя код самих объектов. Для этого используется интерфейс java. util. Comparator, в котором необходимо реализовать метод compare(Object, Object) Сравнение производится по полям класса с помошью getter’ов Классы-компараторы нужны в случае, когда объекты сортированных коллекций не реализуют интерфейс Comparable. 23
Best Practices § Используйте интерфейс только для определения типов. Шаблон интерфейса констант - это неудачный вариант использования интерфейсов. § Проверяйте параметры в публичных методах. 24
Best Practices § Возвращайте пустой объект, а не null 25
Best Practices § Для таких случаев есть паттерн Null Object 26
Best Practices § § § Во имя эффективности (без обязательности ее достижения) делается больше вычислительных ошибок, чем по каким-либо иным причинам, включая непроходимую тупость. William A. Wolf Мы обязаны забывать о мелких усовершенствованиях, скажем, на 97% рабочего времени: опрометчивая оптимизация – корень всех зол. Donald E. Knuth Что касается оптимизации, то мы следуем двум правилам: Правило 1: Не делайте этого. Правило 2 (только для экспертов): пока не делайте этого – т. е. пока у вас нет абсолютно четкого, но неоптимизированного решения. M. A. Jackson 27
Best Practices § Для ссылки на объект используйте его интерфейс 28
Java. util. Collections § § Класс Collections содержит статические методы работы с коллекциями: § Создание immutable коллекций § Shuffle § Сортировочки, binary Search § Min, max § Thread safe synchronized collections § Index of sublist § Etc § Класс Arrays – то же самое, только с массивами § as. List() @see Arrays, Collections & Apcahe Collection. Utils 29
Library § § § Effective Java. Programming Language Guide Item 25. Prefer Lists to Arrays http: //books. google. ru/books? id=ka 2 VUBq. Hi. Wk. C&lpg=PA 119&ots=y. YDh Qep 0 U_&dq=bloch%20 arrays%20 prefer&pg=PA 119#v=onepage&q&f=fal se Thinking In Java by Bruce Eckel Java Interview Design Patterns - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides OReilly. Java. Generics. and_Collections. Oct. 2006 30


