Скачать презентацию Java Advanced Collections Framework Содержание 1 2 Скачать презентацию Java Advanced Collections Framework Содержание 1 2

collections_fixed.ppt

  • Количество слайдов: 76

Java Advanced Collections Framework Java Advanced Collections Framework

Содержание 1. 2. 3. 4. 5. 6. 7. 8. 9. Коллекции Множества Списки Очереди Содержание 1. 2. 3. 4. 5. 6. 7. 8. 9. Коллекции Множества Списки Очереди Отображения Упорядоченные коллекции Алгоритмы Устаревшие коллекции Заключение Georgiy Korneev Java Advanced / Collections Framework 2

Collections Framework l Набор стандартных контейнеров (коллекций) и правил их использования Интерфейсы l Релизации Collections Framework l Набор стандартных контейнеров (коллекций) и правил их использования Интерфейсы l Релизации l Алгоритмы l l Пакет java. util Georgiy Korneev Java Advanced / Collections Framework 3

Часть 1 Коллекции Часть 1 Коллекции

Коллекции Коллекция ─ неупорядоченный набор элементов l Интерфейс Collection l Georgiy Korneev Java Advanced Коллекции Коллекция ─ неупорядоченный набор элементов l Интерфейс Collection l Georgiy Korneev Java Advanced / Collections Framework 5

Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 6 Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 6

Немодифицирующие операции l Определение размера size() ─ количество элементов l is. Empty() ─ проверка Немодифицирующие операции l Определение размера size() ─ количество элементов l is. Empty() ─ проверка на пустоту l l Проверки на вхождение contains(Object o) ─ одного элемента l contains. All(Collection c) ─ всех элементов коллекции c l Georgiy Korneev Java Advanced / Collections Framework 7

Модифицирующие операции l Добавление элементов add(Object e) ─ одного элемента l add. All(Collection c) Модифицирующие операции l Добавление элементов add(Object e) ─ одного элемента l add. All(Collection c) ─ элементов коллекции l l Удаление элементов remove(Object e) ─ одного элемента l remove. All(Collection с) ─ элементов коллекции l retain. All(Collection с) ─ удаление элементов не из коллекции l clear() ─ удаление всех элементов l l Исключения l Unsupported. Operation. Exception Georgiy Korneev Java Advanced / Collections Framework 8

Пример. ? public int read(String file) throws IOException { Scanner scanner = new Scanner( Пример. ? public int read(String file) throws IOException { Scanner scanner = new Scanner( new File(file), "Cp 1251"); int read = 0; while (scanner. has. Next()) { read++; c. add(scanner. next()); } return read; } Georgiy Korneev Java Advanced / Collections Framework 9

Итераторы Итератор ─ обход коллекции l Интерфейс Iterator l Метод Iterator Collection. iterator() l Итераторы Итератор ─ обход коллекции l Интерфейс Iterator l Метод Iterator Collection. iterator() l Georgiy Korneev Java Advanced / Collections Framework 10

Методы итераторов has. Next() ─ определение наличия следующего элемента l next() ─ взятие следующего Методы итераторов has. Next() ─ определение наличия следующего элемента l next() ─ взятие следующего элемента l remove() ─ удаление элемента l l Исключения No. Such. Element. Exception ─ бросается при достижении конца коллекции l Concurrent. Modification. Exception ─ бросается при изменении коллекции l Georgiy Korneev Java Advanced / Collections Framework 11

Применение итераторов l ? for(Iterator i = c. iterator(); i. has. Next(); ) { Применение итераторов l ? for(Iterator i = c. iterator(); i. has. Next(); ) { E element = (E) i. next(); . . . } l ? for(Iterator i = c. iterator(); i. has. Next(); ) { if (!p(i. next()) i. remove(); } Georgiy Korneev Java Advanced / Collections Framework 12

Пример. ? public void dump() { for (Iterator i = c. iterator(); i. has. Пример. ? public void dump() { for (Iterator i = c. iterator(); i. has. Next(); ) { String word = (String) i. next(); System. out. print(word + ", "); } System. out. println(); } Georgiy Korneev Java Advanced / Collections Framework 13

Часть 2 Множества Часть 2 Множества

Множества Множество ─ коллекция без повторяющихся элементов l Интерфейс Set l Georgiy Korneev Java Множества Множество ─ коллекция без повторяющихся элементов l Интерфейс Set l Georgiy Korneev Java Advanced / Collections Framework 15

Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 16 Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 16

Сравнение элементов Метод Object. equals(Object object) l Рефлексивность l o 1. equals(o 1) l Сравнение элементов Метод Object. equals(Object object) l Рефлексивность l o 1. equals(o 1) l Симметричность o 1. equals(o 2) == e 2. equals(o 1) l Транзитивность o 1. equals(o 2) && o 2. equals(o 3) => o 1. equals(o 3) l Устойчивость o 1. equals(o 2) не изменяется, если o 1 и o 2 не изменяются l Обработка null o 1. equals(null) == false Georgiy Korneev Java Advanced / Collections Framework 17

Операции над множествами add. All(Collection c) – объединение множеств l retain. All(Collection c) – Операции над множествами add. All(Collection c) – объединение множеств l retain. All(Collection c) – пересечение множеств l contains. All(Collection c) – проверка вхождения l remove. All(Collection c) – разность множеств l Georgiy Korneev Java Advanced / Collections Framework 18

Классы Hash. Set и Linked. Hash. Set ─ множество на основе хэша l Linked. Классы Hash. Set и Linked. Hash. Set ─ множество на основе хэша l Linked. Hash. Set ─ множество на основе хэша c сохранение порядка обхода l Georgiy Korneev Java Advanced / Collections Framework 19

Вычисление хэшей Метод Object. hash. Code() l Устойчивость l hash. Code() не изменяется, если Вычисление хэшей Метод Object. hash. Code() l Устойчивость l hash. Code() не изменяется, если объект не изменяется l Согласованность с equals o 1. equals(o 2) => o 1. hash. Code() == o 2. hash. Code() Georgiy Korneev Java Advanced / Collections Framework 20

Конструкторы Hash. Set() ─ пустое множество l Hash. Set(Collection c) ─ элементы коллекции l Конструкторы Hash. Set() ─ пустое множество l Hash. Set(Collection c) ─ элементы коллекции l Hash. Set(int initial. Capacity) ─ начальная вместимость l Hash. Set(int initial. Capacity, double load. Factor) ─ начальная вместимость и степень заполнения l Georgiy Korneev Java Advanced / Collections Framework 21

Пример. ? Collection. Example c = new Collection. Example(new Hash. Set()); int words = Пример. ? Collection. Example c = new Collection. Example(new Hash. Set()); int words = c. read(args[0]); System. out. println(“? total: " + words); System. out. println(“? words: " + c. get. Collection(). size()); c. dump(); Georgiy Korneev Java Advanced / Collections Framework 22

Часть 3 Списки Часть 3 Списки

Списки Список ─ коллекция с индексированными элементами l Интерфейс List l Georgiy Korneev Java Списки Список ─ коллекция с индексированными элементами l Интерфейс List l Georgiy Korneev Java Advanced / Collections Framework 24

Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 25 Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 25

Операции со списками l Доступ по индексу get(int i) ─ чтение l set(int I, Операции со списками l Доступ по индексу get(int i) ─ чтение l set(int I, Object e) ─ запись l add(int i, Object e) ─ добавление l remove(int i) ─ удаление l l Поиск элементов index. Of(Object e) ─ поиск с начала l last. Index. Of(Object e) ─ поиск с конца l l Взятие вида l List sub. List(int from, int to) Georgiy Korneev Java Advanced / Collections Framework 26

Итератор по списку Интерфейс List. Iterator extends Iterator l Метод list. Iterator() l Предыдущий Итератор по списку Интерфейс List. Iterator extends Iterator l Метод list. Iterator() l Предыдущий / Следующий элементы l Georgiy Korneev Java Advanced / Collections Framework 27

Операции итератора по списку l Передвижение has. Next() / has. Previous() ─ проверка l Операции итератора по списку l Передвижение has. Next() / has. Previous() ─ проверка l next() / previous() ─ взятие элемента l next. Index() / previous. Index() ─ определение индекса l l Изменение remove() ─ удаление элемента l set(Object e) ─ изменение элемента l add(Object e) ─ добавление элемента l Georgiy Korneev Java Advanced / Collections Framework 28

Класс Array. List ─ список на базе массива l Плюсы l Быстрый доступ по Класс Array. List ─ список на базе массива l Плюсы l Быстрый доступ по индексу l Быстрая вставка и удаление элементов с конца l l Минусы l Медленная вставка и удаление элементов Georgiy Korneev Java Advanced / Collections Framework 29

Вместимость Array. List Вместимость ─ реальное количество элементов l Дополнительные методы l ensure. Capacity(int Вместимость Array. List Вместимость ─ реальное количество элементов l Дополнительные методы l ensure. Capacity(int c) ─ определение вместимости l trim. To. Size() ─ “подгонка” вместимости l Georgiy Korneev Java Advanced / Collections Framework 30

Конструкторы Array. List() ─ пустой список l Array. List(Collection c) ─ копия коллекции l Конструкторы Array. List() ─ пустой список l Array. List(Collection c) ─ копия коллекции l Array. List(int initial. Capacity) ─ пустой список заданной вместимости l Georgiy Korneev Java Advanced / Collections Framework 31

Применения Array. List “Бесконечный” массив l Стек l Georgiy Korneev Java Advanced / Collections Применения Array. List “Бесконечный” массив l Стек l Georgiy Korneev Java Advanced / Collections Framework 32

Пример. ? List list = new Array. List(); … for (int i = list. Пример. ? List list = new Array. List(); … for (int i = list. size() - 1; i >= 0; i--) { System. out. println(list. get(i)); } Georgiy Korneev Java Advanced / Collections Framework 33

Класс Linked. List ─ двусвязный список l Плюсы l l l Быстрое добавление и Класс Linked. List ─ двусвязный список l Плюсы l l l Быстрое добавление и удаление элементов Минусы l Медленный доступ по индексу Georgiy Korneev Java Advanced / Collections Framework 34

Возможности Linked. List l Конструкторы Linked. List() ─ пустой список l Linked. List(Collection c) Возможности Linked. List l Конструкторы Linked. List() ─ пустой список l Linked. List(Collection c) ─ копия коллекции l l Методы add. First(Object o) – добавить в начало списка l add. Last(Object o) – добавить в конец списка l remove. First() – удалить первый элемент l remove. Last() – удалить последний элемент l Georgiy Korneev Java Advanced / Collections Framework 35

Применения Linked. List Стек l Очередь l Дек l Georgiy Korneev Java Advanced / Применения Linked. List Стек l Очередь l Дек l Georgiy Korneev Java Advanced / Collections Framework 36

Пример. ? List list = new Linked. List(); … for (List. Iterator li = Пример. ? List list = new Linked. List(); … for (List. Iterator li = list. Iterator(list. size()); li. has. Previous(); ) { System. out. println(li. previous()); } Georgiy Korneev Java Advanced / Collections Framework 37

Часть 4 Очереди Часть 4 Очереди

Структура Collections Framework (2) Georgiy Korneev Java Advanced / Collections Framework 39 Структура Collections Framework (2) Georgiy Korneev Java Advanced / Collections Framework 39

Очередь – хранилище элементов для обработки l Интерфейс Queue l Свойства очередей l Порядок Очередь – хранилище элементов для обработки l Интерфейс Queue l Свойства очередей l Порядок выдачи элементов определяется конкретной реализацией l Очереди не могут хранить null l У очереди может быть ограничен размер l Georgiy Korneev Java Advanced / Collections Framework 40

Методы очередей l Обычные методы l add(Object o) – добавить элемент l l Object Методы очередей l Обычные методы l add(Object o) – добавить элемент l l Object element() – вершина очереди l l Бросает No. Such. Element. Exception Object remove() – удалить элемент из вершины l l Бросает Illegal. State. Exception Бросает No. Such. Element. Exception Методы, не бросающие исключений offer(Object o) – добавить элемент l Object peek() – вершина очереди l Object poll() – удалить элемент из вершины l Georgiy Korneev Java Advanced / Collections Framework 41

Класс Linked. List l Очередь на двусвязном списке Georgiy Korneev Java Advanced / Collections Класс Linked. List l Очередь на двусвязном списке Georgiy Korneev Java Advanced / Collections Framework 42

Часть 5 Отображения Часть 5 Отображения

Структура Collections Framework (2) Georgiy Korneev Java Advanced / Collections Framework 44 Структура Collections Framework (2) Georgiy Korneev Java Advanced / Collections Framework 44

Отображение ─ множество пар ключ-значение при уникальности ключа l Интерфейс Map l Georgiy Korneev Отображение ─ множество пар ключ-значение при уникальности ключа l Интерфейс Map l Georgiy Korneev Java Advanced / Collections Framework 45

Методы отображений (1) l Доступ get(Object k) ─ получение значение l put(Object k, Object Методы отображений (1) l Доступ get(Object k) ─ получение значение l put(Object k, Object v) ─ запись l remove(Object k) ─ удаление l l Проверки contains. Key(Object k) ─ наличие ключа l contains. Value(Object v) ─ наличие значения l l Определения размера size() ─ размер отображения l is. Empty() ─ проверка на пустоту l Georgiy Korneev Java Advanced / Collections Framework 46

Методы отображений (2) l Взятие видов entry. Set() ─ множество пар l values() ─ Методы отображений (2) l Взятие видов entry. Set() ─ множество пар l values() ─ коллекция значений l key. Set() ─ множество ключей l l Массовые операции l put. All(Map map) ─ добавление всех пар Georgiy Korneev Java Advanced / Collections Framework 47

Пары Пара ─ ключ + значение l Интерфейс Map. Entry l Методы l Object Пары Пара ─ ключ + значение l Интерфейс Map. Entry l Методы l Object get. Key() l Object get. Value() l set. Value(Object v) l Georgiy Korneev Java Advanced / Collections Framework 48

Классы Hash. Map и Linked. Hash. Map ─ отображение на основе хэшей l Linked. Классы Hash. Map и Linked. Hash. Map ─ отображение на основе хэшей l Linked. Hash. Map ─ отображение на основе хэшей с сохранением порядка обхода l Georgiy Korneev Java Advanced / Collections Framework 49

Конструкторы Hash. Map() ─ пустое отображение l Hash. Map(Map m) ─ копия отображения l Конструкторы Hash. Map() ─ пустое отображение l Hash. Map(Map m) ─ копия отображения l Hash. Map(int initial. Capacity) ─ начальная вместимость l Hash. Map (int initial. Capacity, int load. Factor) ─ начальная вместимость и степень заполнения l Georgiy Korneev Java Advanced / Collections Framework 50

Пример. ? while (scanner. has. Next()) { String word = scanner. next(); Integer count Пример. ? while (scanner. has. Next()) { String word = scanner. next(); Integer count = (Integer) map. get(word); int value = (count == null) ? 0 : count. int. Value(); map. put(word, new Integer(value + 1)); } Georgiy Korneev Java Advanced / Collections Framework 51

Пример. ? for ( Iterator i = map. entry. Set(). iterator(); i. has. Next(); Пример. ? for ( Iterator i = map. entry. Set(). iterator(); i. has. Next(); ) { Map. Entry entry = (Map. Entry) i. next(); System. out. println( entry. get. Key() + " " + entry. get. Value()); } Georgiy Korneev Java Advanced / Collections Framework 52

Часть 6 Упорядоченные коллекции Часть 6 Упорядоченные коллекции

Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 54 Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 54

Структура Collections Framework (2) Georgiy Korneev Java Advanced / Collections Framework 55 Структура Collections Framework (2) Georgiy Korneev Java Advanced / Collections Framework 55

Сравнение элементов l Интерфейс Comparable l l int compare. To(Object o) ─ естественный порядок Сравнение элементов l Интерфейс Comparable l l int compare. To(Object o) ─ естественный порядок Интерфейс Comparator l int compare(Object o 1, Object o 2) ─ сравнение элементов Georgiy Korneev Java Advanced / Collections Framework 56

Сравнение элементов (контракт) Транзитивность l Антисимметричность l sgn(o 1. compare. To(o 2)) == -sgn(o Сравнение элементов (контракт) Транзитивность l Антисимметричность l sgn(o 1. compare. To(o 2)) == -sgn(o 2. compare. To(o 1)) l Согласованность с равенством o 1. compare. To(o 2) == 0 => sgn(o 1. compare. To(o 3)) == sgn(o 2. compare. To(o 3)) l Согласованность с equals() o 1. equals(o 2) == (o 1. compare. To(o 2) == 0) Georgiy Korneev Java Advanced / Collections Framework 57

Упорядоченные множества l Интерфейс Sorted. Set l l l first() – минимальный элемент last() Упорядоченные множества l Интерфейс Sorted. Set l l l first() – минимальный элемент last() – максимальный элемент head. Set(Object o) – подмножество элементов меньших o tail. Set(Object o) – подмножество элементов больших либо равных o sub. Set(Object o 1, Object o 2) – подмножество элементов меньших o 2 и больше либо равных o 2 Класс Tree. Set Georgiy Korneev Java Advanced / Collections Framework 58

Упорядоченные отображения l Интерфейс Sorted. Map l l l first. Key() – минимальный ключ Упорядоченные отображения l Интерфейс Sorted. Map l l l first. Key() – минимальный ключ last. Key() – максимальный ключ head. Map(Object o) – отображение ключей меньших o tail. Map(Object o) – отображение ключей больших либо равных o sub. Map(Object o 1, Object o 2) – отображение ключей меньших o 2 и больше либо равных o 1 Класс Tree. Map Georgiy Korneev Java Advanced / Collections Framework 59

Класс Priority. Queue Очередь с приоритетами l Реализована на основе двоичной кучи l Georgiy Класс Priority. Queue Очередь с приоритетами l Реализована на основе двоичной кучи l Georgiy Korneev Java Advanced / Collections Framework 60

Пример. Применение Tree. Set l Естественный порядок Collection. Example c = new Collection. Example( Пример. Применение Tree. Set l Естественный порядок Collection. Example c = new Collection. Example( new Tree. Set()); c. read(args[0]); c. dump(); l Порядок без учета регистра Collection. Example c = new Collection. Example(new Tree. Set(String. CASE_INSENSITIVE_ORDER)); int words = c. read(args[0]); c. dump(); Georgiy Korneev Java Advanced / Collections Framework 61

Часть 7 Алгоритмы Часть 7 Алгоритмы

Класс Collections l Алгоритмы для работы с коллекциями l l l Простые операции Перемешивание Класс Collections l Алгоритмы для работы с коллекциями l l l Простые операции Перемешивание Сортировка Двоичный поиск Поиск минимума и максимума Специальные коллекции l Оболочки коллекций l Georgiy Korneev Java Advanced / Collections Framework 63

Простые операции l Заполнение списка указанным значением l l Переворачивание списка l l fill(List Простые операции l Заполнение списка указанным значением l l Переворачивание списка l l fill(List l, Object v) reverse(List l) Копирование из списка в список l copy(List l 1, List l 2) Georgiy Korneev Java Advanced / Collections Framework 64

Перемешивание Генерирует случайную перестановку l Методы l shuffle(List l) l shuffle(List l, Random r) Перемешивание Генерирует случайную перестановку l Методы l shuffle(List l) l shuffle(List l, Random r) l Georgiy Korneev Java Advanced / Collections Framework 65

Сортировки Устойчивая сортировка l Алгоритм – Merge Sort l Методы l sort(List l) – Сортировки Устойчивая сортировка l Алгоритм – Merge Sort l Методы l sort(List l) – сортировка списка (естественный порядок) l sort(List l, Comparator c) – сортировка списка (указанный порядок) l Georgiy Korneev Java Advanced / Collections Framework 66

Двоичный поиск Осуществляет двоичный поиск в списке l Методы l binary. Search(List l, Object Двоичный поиск Осуществляет двоичный поиск в списке l Методы l binary. Search(List l, Object o) – ищет o в списке l binary. Search(List l, Object o, Comparator c) – ищет o в списке l Georgiy Korneev Java Advanced / Collections Framework 67

Поиск минимума и максимума l Поиск минимума min(Collection c) – минимальный элемент (естественный порядок) Поиск минимума и максимума l Поиск минимума min(Collection c) – минимальный элемент (естественный порядок) l min(Collection c, Comparator cmp) – минимальный элемент (указанный порядок) l l Поиск максимума max(Collection c) – максимальный элемент (естественный порядок) l max(Collection c, Comparator cmp) – максимальный элемент (указанный порядок) l Georgiy Korneev Java Advanced / Collections Framework 68

Пример. Алгоритмы на списках List list = new Array. List(); Collection. Example c = Пример. Алгоритмы на списках List list = new Array. List(); Collection. Example c = new Collection. Example(list); c. read(args[0]); Collections. reverse(list); Collections. shuffle(list); Collections. sort(list, String. CASE_INSENSITIVE_ORDER); Collections. fill(list, "temp"); System. out. println(Collections. min(list)); System. out. println(Collections. min(list, String. CASE_INSENSITIVE_ORDER)); Georgiy Korneev Java Advanced / Collections Framework 69

Оболочки коллекций l Неизменяемые виды на коллекции l l l unmodifiable. Set(Set s) – Оболочки коллекций l Неизменяемые виды на коллекции l l l unmodifiable. Set(Set s) – неизменяемое множество unmodifiable. Sorted. Set(Sorted. Set s) – неизменяемое упорядоченное множество unmodifiable. List(List l) – неизменяемый список unmodifiable. Map(Map m) – неизменяемое отображение unmodifiable. Sorted. Map(Sorted. Map m) – неизменяемое упорядоченное отображени Georgiy Korneev Java Advanced / Collections Framework 70

Класс Arrays l Операции с массивами l l l Сортировка Двоичный поиск Поиск минимума Класс Arrays l Операции с массивами l l l Сортировка Двоичный поиск Поиск минимума и максимума Заполнение Перемешивание Вид массива как списка l List as. List() Georgiy Korneev Java Advanced / Collections Framework 71

Часть 8 Устаревшие коллекции Часть 8 Устаревшие коллекции

Устаревшие коллекции являются синхронизированными l Vector (Array. List) l l l Dictionary (Map) l Устаревшие коллекции являются синхронизированными l Vector (Array. List) l l l Dictionary (Map) l l Stack (Array. List) Hashtable (Hash. Map) Enumeration (Iterator) Georgiy Korneev Java Advanced / Collections Framework 73

Часть 9 Заключение Часть 9 Заключение

Ссылки Collections Framework // http: //java. sun. com/j 2 se/1. 5. 0/docs/guide/coll ections/index. html Ссылки Collections Framework // http: //java. sun. com/j 2 se/1. 5. 0/docs/guide/coll ections/index. html l Collections Tutorial // http: //java. sun. com/docs/books/tutorial/collect ions/index. html l Introduction to the Collections Framework // http: //java. sun. com/developer/online. Training/ collections/ l Georgiy Korneev Java Advanced / Collections Framework 75

Вопросы Georgiy Korneev Java Advanced / Collections Framework 76 Вопросы Georgiy Korneev Java Advanced / Collections Framework 76