1 Java 10. КОЛЛЕКЦИИ Множества Карты отображений.

Презентация:



Advertisements
Похожие презентации
Коллекции классов Лекция 12. С помощью коллекций вместо создания структур данных программист использует готовые структуры данных, не заботясь об их реализации.
Advertisements

САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
1 Java 10. КОЛЛЕКЦИИ Основные концепции. Интерфейсы. Списки.
Ассоциативные списки Поиск данных происходит не по индексу или положению объекта, а по его ассоциативной связи: public interface Map { // Доступ к объектам.
Java : массивы и коллекции. Массивы Массивы простых типов: int []a = new int[10]; int []b = new int[]{ 0, 1, 2, 3, 4, 5 }; Массивы ссылочных типов (reference.
Collections Framework Java Advanced. 2Georgiy KorneevJava Advanced / Collections Framework Содержание 1.Коллекции 2.Множества 3.Списки 4.Очереди 5.Отображения.
АССОЦИАТИВНЫЕ КОЛЛЕКЦИИ Лекция 6 1. Отличие от последовательных 2 В последовательной коллекции каждый элемент ассоциируется с номером, начиная с 0. В.
1 Параметризация типов в Java public class Box { private Object object; public void add(Object object) { this.object = object; } public Object get() {
Collections Framework Java Advanced. 2Georgiy KorneevJava Advanced / Collections Framework Содержание 1.Коллекции 2.Множества 3.Списки 4.Очереди и деки.
Java Collections Framework Commons-collections Коллекции в многопоточной среде Коллекции в Java.
Контейнеры Сортировка Метод sort() Интерфейс Comparable метод int compareTo(Object o) вызов: Arrays.sort(a) Интерфейс Comparator метод int compare(Object.
Классы и объекты Лекция 2. Классификатор Класс Интерфейс Экземпляр класса Ассоциация Квалификатор Класс ассоциации Обобщение Украшение Тип данных Пакеты.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Ресурсы WPF Два типа ресурсов WPF: объектные ресурсы (object resource) – определенный.NET-объект, который можно использовать многократно; ресурсы сборки.
1 Java 6. ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ. 2 Интерфейсы Не являются классами Ни один из объявленных методов не может быть реализован внутри интерфейса.
Абстрактный тип данных список. Операции над абстрактным списком Создать пустой список Уничтожить список Определить, пуст ли список Определить количество.
Особенности C# Индексаторы, события, частичные методы, расширяющие методы, сборщик мусора DraggonZ.
Механизмы поиска в БД Структуры индексов. Основные виды индексов Простые индексы для упорядоченных файлов Вторичные индексы для неупорядоченных файлов.
Множества Множества Основные понятия Курс. Определение : Множество это набор элементов одинакового типа, которые рассматриваются как единое целое.
Технология хранения, поиска и сортировки информации в базах данных
Транксрипт:

1 Java 10. КОЛЛЕКЦИИ Множества Карты отображений

2 Множества Интерфейс Set объявляет поведение коллекции, не допускающей дублирования элементов. Интерфейс SortedSet наследует Set и объявляет поведение набора, отсортированного в возрастающем порядке, заранее определенном для класса. Интерфейс NavigableSet существенно облегчает поиск элементов. Множества часто используются для проверки принадлежности объекта заданному множеству. Т.е. важнейшая операция Set - операция поиска, поэтому на практике обычно выбирается реализация HashSet, оптимизированная для быстрого поиска. Set Hierarchy Interface Hierarchy

3 Класс HashSet наследуется от абстрактного суперкласса AbstractSet и реализует интерфейс Set, используя хэш-таблицу для хранения коллекции. Ключ (хэш-код) используется вместо индекса для доступа к данным, что значительно ускоряет поиск определенного элемента. Скорость поиска существенна для коллекций с большим количеством элементов. Все элементы такого множества упорядочены посредством хэш- таблицы, в которой хранятся хэш-коды элементов. example09 - использование множества для вывода всех уникальных слов из файла : DemoHashSet.java

4 Класс TreeSet Класс TreeSet для хранения объектов использует бинарное дерево. При добавлении объекта в дерево он сразу же размещается в необходимую позицию с учетом сортировки. Сортировка происходит благодаря тому, что все добавляемые элементы реализуют интерфейсы Comparator и Comparable. Обработка операций удаления и вставки объектов происходит медленнее, чем в хэш-множествах, но быстрее, чем в списках.

5 Методы класса TreeSet E first() E last() извлечение первого и последнего (наименьшего и наибольшего) элементов SortedSet subSet(E from, E to) SortedSet tailSet(E from) SortedSet headSet(E to) извлечение определенной части множества Comparator comparator() возвращает объект Comparator, используемый для сортировки объектов множества или null, если выполняется обычная сортировка example09 - создание множества из списка и его методы: DemoTreeSet.java

6 EnumSet > Абстрактный класс EnumSet > наследуется от абстрактного класса AbstractSet. Специально реализован для работы с типами enum. Все элементы такой коллекции должны принадлежать единственному типу enum, определенному явно или неявно. Внутренне множество представимо в виде вектора битов, обычно единственного long. Множества нумераторов поддерживают перебор по диапазону из нумераторов. Скорость выполнения операций над таким множеством очень высока, даже если в ней участвует большое количество элементов.

7 Создание объектов EnumSet Создать объект этого класса можно только с помощью статических методов класса: EnumSet noneOf(Class elemType) cоздает пустое множество нумерованных констант с указанным типом элемента. allOf(Class elementType) создает множество нумерованных констант, содержащее все элементы указанного типа. of(E first, E... rest) создает множество, первоначально содержащее указанные элементы. complementOf(EnumSet s) создает множество, содержащее все элементы, которые отсутствуют в указанном множестве. range(E from, E to) создает множество из элементов, содержащихся в диапазоне, определенном двумя элементами. При передаче вышеуказанным методам в качестве параметра null будет сгенерирована исключительная ситуация NullPointerException. example09 - иcпользование множества enum-типов : UseEnumSet.java

8 Методы интерфейса NavigableSet first() возвращает первый элемент из множества subSet(E fromElement, E toElement) возвращает список элементов, находящихся между fromElement и toElement, причем последний не включается headSet(E element) tailSet(E element, boolean inclusive) возвращают то множество элементов, которое меньше либо больше element соответственно Если inclusive равно true, то элемент включается в найденное множество и не включается в противном случае example09 - иcпользование множества NavigableSet: NavigableSetTest.java

9 Карты отображений Карта отображений – это объект, который хранит пару ключ- значение. Поиск объекта (значения) облегчается по сравнению с множествами за счет того, что его можно найти по его уникальному ключу. Уникальность объектов-ключей должна обеспечиваться переопределением методов hashCode() и equals() пользовательским классом. Если элемент с указанным ключом отсутствует в карте, то возвращается значение null.

10 Интерфейсы карт Map – отображает уникальные ключи и значения Map.Entry – описывает пару ключ-значение SortedMap – содержит отсортированные ключи и значения NavigableMap – добавляет новые возможности поиска по ключу Interface Hierarchy

11 Классы карт отображений AbstractMap – реализует интерфейс Map HashMap – расширяет AbstractMap, используя хэш- таблицу, в которой ключи отсортированы относительно значений их хэш-кодов TreeMap – расширяет AbstractMap, используя дерево, где ключи расположены в виде дерева поиска в строгом порядке WeakHashMap позволяет механизму сборки мусора удалять из карты значения по ключу, ссылка на который вышла из области видимости приложения LinkedHashMap запоминает порядок добавления объектов в карту и образует при этом дважды связанный список ключей. Этот механизм эффективен, только если превышен коэффициент загруженности карты при работе с кэш памятью и др. IdentityHashMap хэш-коды объектов-ключей вычисляются методом System.identityHashCode() по адресу объекта в памяти, в отличие от обычного значения hashCode(), вычисляемого сугубо по содержимому самого объекта. Map Hierarchy

12 Методы интерфейса Map void clear() удаляет все пары из вызываемой карты boolean containsKey(Object key) возвращает true, если вызывающая карта содержит key как ключ boolean containsValue(Object value) возвращает true, если вызывающая карта содержит value как значение Set > entrySet() возвращает множество, содержащее значения карты Set keySet() возвращает множество ключей V get(Object obj) возвращает значение, связанное с ключом obj

13 Методы интерфейса Map V put(K key, V value) помещает ключ key и значение value в вызывающую карту. При добавлении в карту элемента с существующим ключом произойдет замена текущего элемента новым. При этом метод возвратит заменяемый элемент void putAll Map t) помещает коллекцию t в вызывающую карту V remove(Object key) удаляет пару ключ-значение по ключу key Collection values() возвращает коллекцию, содержащую значения карты

14 Методы интерфейса Map.Entry K getKey() возвращает ключ текущего входа V getValue() возвращает значение текущего входа V setValue(V obj) устанавливает значение объекта obj в текущем входе example10 : создание хэш-карты и замена элемента по ключу: DemoHashMap.java example 10 : применение коллекций при проверке доступа в систему : DemoSecurity.java

15 EnumMap, V> Класс EnumMap, V> в качестве ключа может принимать только объекты, принадлежащие одному типу enum, который должен быть определен при создании коллекции. Специально организован для обеспечения максимальной скорости доступа к элементам коллекции. example10 : пример работы с классом EnumMap: UseEnumMap.java

16 Унаследованные коллекции В ряде распределенных приложений, например с использованием сервлетов, до сих пор применяются коллекции, более медленные в обработке, но при этом потокобезопасные, существовавшие в языке Java с момента его создания: карта Hashtable, список Vector Перечисление Enumeration. Все они также были параметризованы, но сохранили все свои особенности. Класс Hashtable реализует интерфейс Map, но обладает также несколькими интересными методами: Enumeration elements() – возвращает перечисление (аналог итератора) для значений карты; Enumeration keys() – возвращает перечисление для ключей карты пример11 : создание хэш-таблицы и поиск элемента по ключу: HashTableDemo.java

17 Класс Collections Класс Collections содержит большое количество статических методов, предназначенных для манипулирования коллекциями. С применением предыдущих версий языка было разработано множество коллекций, в которых никаких проверок нет, следовательно, при их использовании нельзя гарантировать, что в коллекцию не будет помещен посторонний объект. Для этого в класс Collections был добавлен новый метод – checkedCollection(): public static Collection checkedCollection(Collection c, Class type) Этот метод создает коллекцию, проверяемую на этапе выполнения, то есть в случае добавления постороннего объекта генерируется исключение ClassCastException example11 : проверяемая коллекция: SafeCollection.java

18 Специализированные методы Класса Collections checkedList(), checkedSortedMap(), checkedMap(), checkedSortedSet(), checkedSet() для проверки конкретных типов коллекций boolean addAll(Collection c, T... a) добавляет в параметризованную коллекцию соответствующие параметризации элементы void copy(List dest, List src) копирует все элементы из одного списка в другой boolean disjoint(Collection c1, Collection c2) возвращает true, если коллекции не содержат одинаковых элементов

19 Специализированные методы Класса Collections List emptyList(), Map emptyMap(), Set emptySet() возвращают пустой список, карту отображения и множество соответственно void fill(List list, T obj) заполняет список заданным элементом int frequency(Collection c, Object o) возвращает количество вхождений в коллекцию заданного элемента > T max(Collection coll) > T min(Collection coll) возвращают минимальный и максимальный элемент соответственно

20 Специализированные методы Класса Collections T max(Collection coll, Comparator comp) T min(Collection coll, Comparator comp) возвращают минимальный и максимальный элемент соответственно, используя Comparator для сравнения boolean replaceAll(List list, T oldVal, T newVal) заменяет все заданные элементы новыми > void sort(List list) void sort(List list, Comparator c) сортировка списка, естественным порядком и используя Comparator соответственно void swap(List list, int i, int j) меняет местами элементы списка стоящие на заданных позициях

21 Специализированные методы Класса Collections List nCopies(int n, T o)возвращает список из n заданных элементов void reverse(List list)переворачивает список; void rotate(List list, int distance)сдвигает список циклически на заданное число элементов void shuffle(List list)перетасовывает элементы списка Set singleton(T o) List singletonList(T o) Map singletonMap(K key, V value) создают множество, список и карту отображения, состоящие из одного элемента /* пример # 11 : методы класса Collections: CollectionsDemo.java */

22 Методы класса Arrays int binarySearch(параметры)перегруженный метод организации бинарного поиска значения в массивах примитивных и объектных типов. Возвращает позицию первого совпадения void fill(параметры)перегруженный метод для заполнения массивов значениями различных типов и примитивами void sort(параметры)перегруженный метод сортировки массива или его части с использованием интерфейса Comparator и без него static T[ ] copyOf(T[ ] original, int newLength) заполняет массив определенной длины, отбрасывая элементы или заполняя null при необходимости

23 Методы класса Arrays static T[ ] copyOfRange(T[ ] original, int from, int to) копирует заданную область массива в новый массив List asList(T... a)метод, копирующий элементы массива в объект типа List /* пример # 11 : методы класса Arrays : ArraysEqualDemo.java*/

24 Ключевые моменты Интерфейс Set объявляет поведение коллекции, не допускающей дублирования элементов Карта отображений – это объект, который хранит пару ключ- значение ( Map ) Различные реализации Set и Map обеспечивают различные способы хранения элементов и доступа к ним Для работы с элементами карт используется интерфейс Map.Entry