collections_fixed.ppt
- Количество слайдов: 76
Java Advanced Collections Framework
Содержание 1. 2. 3. 4. 5. 6. 7. 8. 9. Коллекции Множества Списки Очереди Отображения Упорядоченные коллекции Алгоритмы Устаревшие коллекции Заключение Georgiy Korneev Java Advanced / Collections Framework 2
Collections Framework l Набор стандартных контейнеров (коллекций) и правил их использования Интерфейсы l Релизации l Алгоритмы l l Пакет java. util Georgiy Korneev Java Advanced / Collections Framework 3
Часть 1 Коллекции
Коллекции Коллекция ─ неупорядоченный набор элементов l Интерфейс Collection l Georgiy Korneev Java Advanced / Collections Framework 5
Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 6
Немодифицирующие операции 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 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( 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 Georgiy Korneev Java Advanced / Collections Framework 10
Методы итераторов 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(); ) { 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. Next(); ) { String word = (String) i. next(); System. out. print(word + ", "); } System. out. println(); } Georgiy Korneev Java Advanced / Collections Framework 13
Часть 2 Множества
Множества Множество ─ коллекция без повторяющихся элементов l Интерфейс Set l Georgiy Korneev Java Advanced / Collections Framework 15
Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 16
Сравнение элементов Метод 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) – пересечение множеств 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 ─ множество на основе хэша c сохранение порядка обхода l Georgiy Korneev Java Advanced / Collections Framework 19
Вычисление хэшей Метод 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(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 = 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 Списки
Списки Список ─ коллекция с индексированными элементами l Интерфейс List l Georgiy Korneev Java Advanced / Collections Framework 24
Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 25
Операции со списками 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 Предыдущий / Следующий элементы l Georgiy Korneev Java Advanced / Collections Framework 27
Операции итератора по списку 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 Быстрый доступ по индексу l Быстрая вставка и удаление элементов с конца l l Минусы l Медленная вставка и удаление элементов Georgiy Korneev Java Advanced / Collections Framework 29
Вместимость 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(int initial. Capacity) ─ пустой список заданной вместимости l Georgiy Korneev Java Advanced / Collections Framework 31
Применения Array. List “Бесконечный” массив l Стек l Georgiy Korneev Java Advanced / Collections Framework 32
Пример. ? 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 Быстрое добавление и удаление элементов Минусы l Медленный доступ по индексу Georgiy Korneev Java Advanced / Collections Framework 34
Возможности 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 / Collections Framework 36
Пример. ? 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 Очереди
Структура Collections Framework (2) Georgiy Korneev Java Advanced / Collections Framework 39
Очередь – хранилище элементов для обработки l Интерфейс Queue l Свойства очередей l Порядок выдачи элементов определяется конкретной реализацией l Очереди не могут хранить null l У очереди может быть ограничен размер l Georgiy Korneev Java Advanced / Collections Framework 40
Методы очередей 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 Framework 42
Часть 5 Отображения
Структура Collections Framework (2) Georgiy Korneev Java Advanced / Collections Framework 44
Отображение ─ множество пар ключ-значение при уникальности ключа l Интерфейс Map l Georgiy Korneev Java Advanced / Collections Framework 45
Методы отображений (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() ─ коллекция значений l key. Set() ─ множество ключей l l Массовые операции l put. All(Map map) ─ добавление всех пар Georgiy Korneev Java Advanced / Collections Framework 47
Пары Пара ─ ключ + значение 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 ─ отображение на основе хэшей с сохранением порядка обхода l Georgiy Korneev Java Advanced / Collections Framework 49
Конструкторы 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 = (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(); ) { Map. Entry entry = (Map. Entry) i. next(); System. out. println( entry. get. Key() + " " + entry. get. Value()); } Georgiy Korneev Java Advanced / Collections Framework 52
Часть 6 Упорядоченные коллекции
Структура Collections Framework (1) Georgiy Korneev Java Advanced / Collections Framework 54
Структура Collections Framework (2) Georgiy Korneev Java Advanced / Collections Framework 55
Сравнение элементов 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 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() – максимальный элемент 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() – минимальный ключ 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 Korneev Java Advanced / Collections Framework 60
Пример. Применение 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 Алгоритмы
Класс Collections l Алгоритмы для работы с коллекциями l l l Простые операции Перемешивание Сортировка Двоичный поиск Поиск минимума и максимума Специальные коллекции l Оболочки коллекций l Georgiy Korneev Java Advanced / Collections Framework 63
Простые операции 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 Georgiy Korneev Java Advanced / Collections Framework 65
Сортировки Устойчивая сортировка 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 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, 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 = 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) – неизменяемое множество 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 Сортировка Двоичный поиск Поиск минимума и максимума Заполнение Перемешивание Вид массива как списка l List as. List() Georgiy Korneev Java Advanced / Collections Framework 71
Часть 8 Устаревшие коллекции
Устаревшие коллекции являются синхронизированными 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 Заключение
Ссылки 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