Разделы презентаций


Мультимедийный курс Программирование на Java Лекция 7 Collections Framework -

Содержание

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

Слайды и текст этой презентации

Слайд 1Мультимедийный курс Программирование на Java Лекция 7 Collections Framework - фреймверк коллекций

объектов
Автор:
Борисенко В.П.

Мультимедийный курс   Программирование на Java   Лекция 7 Collections Framework -  фреймверк коллекций

Слайд 2Коллекции
Часть 1

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

Слайд 3Контейнеры (коллекции)
В пакет java.util входит одна из самых эффективных

подсистем jаvа - каркас коллекций Collections Framewoгk

Каркас коллекций - это

сложная иерархия интерфейсов и классов, реа­лизующих современную технологию управления наборами (группами, коллекциями, контейнерами) объектов

Коллекциями называют структуры, предназначенные для хранения однотипных данных ссылочного типа

Все коллекции Java предназначены для хранения объектов, т.е. потомков класса Object
Контейнеры (коллекции) В пакет java.util входит одна из самых эффективных подсистем jаvа - каркас коллекций Collections FramewoгkКаркас

Слайд 4Контейнеры (коллекции)


Типизированные (параметризованные) коллекции , которые появились в Java

5, позволяют ограничить попадание объектов несоответствующего типа в коллекцию на

этапе компиляции
Контейнеры (коллекции) Типизированные (параметризованные) коллекции , которые появились в Java 5, позволяют ограничить попадание объектов несоответствующего типа

Слайд 5Контейнеры (коллекции)

На вершине библиотеки контейнеров Java расположены два основных

интерфейса, которые представляют два принципиально разных вида коллекций:

интерфейс Collection –

группы отдельных объектов , сформированная по определенным правилам (вершина иерархии остальных коллекций)

интерфейс Map карта отображения– набор пар объектов «ключ - значение», с возможностью выборки по ключу
Контейнеры (коллекции) На вершине библиотеки контейнеров Java расположены два основных интерфейса, которые представляют два принципиально разных вида

Слайд 6Массивы vs. Коллекции
И массивы, и коллекции являются объектами

Массивы не могут

изменять размер

Коллекции не могут оперировать с примитивными типами
При передаче в

коллекцию примитивных типов они автоматически преобразовываются в объекты с помощью процедуры Autoinboxing

Map map = new HashMap();
map.put(5, 42);
System.out.println(map.get(new Integer(5)));


Массивы vs. КоллекцииИ массивы, и коллекции являются объектамиМассивы не могут изменять размерКоллекции не могут оперировать с примитивными

Слайд 7Интерфейс Collection
Collection представляет собой группу объектов

Правила хранения элементов задаются

нижележащими интерфейсами, сам же интерфейс Collection в java.util прямых реализаций

не имеет.

Интерфейс Collection Collection представляет собой группу объектовПравила хранения элементов задаются нижележащими интерфейсами, сам же интерфейс Collection в

Слайд 8Интерфейс Collection
Collection представляет собой группу объектов
Правила хранения элементов задаются

нижележащими интерфейсами, сам же интерфейс Collection в java.util прямых реализаций

не имеет

Интерфейс Collection расширяется тремя способами:
интерфейс List – упорядоченный
список, который, хранит элементы в порядке вставки;
интерфейс Set – множество, в котором нельзя хранить повторяющиеся элементы
Интерфейс Queue - очередь
которая реализует FIFO–буфер
Интерфейс Collection Collection представляет собой группу объектовПравила хранения элементов задаются нижележащими интерфейсами, сам же интерфейс Collection в

Слайд 9Списки
Часть 2

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

Слайд 10Иерархия наследования списков

Иерархия наследования списков

Слайд 11Интерфейс List
List – это список объектов

Объекты хранятся в порядке их

добавления в список

В пакете java.util имеется 2 основных класса, реализующих

интерфейс List:
ArrayList – в нем для хранения элементов используется массив
LinkedList – для хранения элементов используется двусвязный список

Интерфейс ListList – это список объектовОбъекты хранятся в порядке их добавления в списокВ пакете java.util имеется 2

Слайд 12Класс ArrayList
Класс ArrayList представляет собой список динамической длины

Данные

внутри класса хранятся во внутреннем массиве

Удаление и добавление элементов

для такой коллекции представляет собой ресурсоемкую задачу, поэтому объект ArrayList лучше всего подходит для хранения неизменяемых списков



Класс ArrayListКласс ArrayList представляет собой список динамической длины Данные внутри класса хранятся во внутреннем массиве Удаление и

Слайд 13Класс ArrayList
По умолчанию при создании нового объекта ArrayList создается внутренний

массив длиной 10 элементов
Collection cl = new ArrayList ();

Можно также

создать ArrayList, задав его начальную длину
Collection cl = new ArrayList (100);

Если длины внутреннего массива не хватает для добавления нового объекта, внутри класса создается новый массив большего объема, и все элементы старого массива копируются в новый

Класс ArrayListПо умолчанию при создании нового объекта ArrayList создается внутренний массив длиной 10 элементовCollection cl = new

Слайд 14Класс LinkedList
Класс LinkedList реализует базовый интерфейс List и

представляет собой список динамической длины. Данные внутри него хранятся в

виде связного списка

В отличие от массива, который хранит объекты в последовательных ячейках памяти, связанный список хранит объекты отдельно, но вместе со ссылками на следующее и предыдущее звенья последовательности

LinkedList выполняет операции вставки и удаления в середине списка более эффективно чем ArrayList

Класс LinkedListКласс LinkedList реализует базовый интерфейс List и представляет собой список динамической длины. Данные внутри него хранятся

Слайд 15Класс LinkedList

У LinkedList представлен ряд методов, не входящих в интерфейс

List:
addFirst() и addLast() - добавить в начало и в конец

списка
removeFirst() и removeLast() - удалить первый и последний элементы
getFirst() и getLast() - получить первый и последний элементы
Класс LinkedListУ LinkedList представлен ряд методов, не входящих в интерфейс List:addFirst() и addLast() - добавить в начало

Слайд 16Интерфейс Queue
Класс LinkedList реализует интерфейс Queue, т.е. такому списку легко

придать свойства очереди

Методы интерфейса Queue:
E element() –

возвращает, но не удаляет головной элемент очереди;
boolean offer(E o) – вставляет элемент в очередь, если возможно;
E peek() – возвращает, но не удаляет головной элемент очереди, возвращает null, если очередь пуста;
E poll() – возвращает и удаляет головной элемент очереди, возвращает null, если очередь пуста;
E remove() – возвращает и удаляет головной элемент очереди
Интерфейс QueueКласс LinkedList реализует интерфейс Queue, т.е. такому списку легко придать свойства очередиМетоды интерфейса Queue:

Слайд 17Интерфейс Deque
Интерфейс Deque определяет «двунаправленную» очередь и, соответственно, методы

доступа к первому и последнему элементам двусторонней очереди

Методы обеспечивают

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


Интерфейс Deque Интерфейс Deque определяет «двунаправленную» очередь и, соответственно, методы доступа к первому и последнему элементам двусторонней

Слайд 18Интерфейс Deque

Каждый из этих методов существует в двух формах

Одни

методы создают исключительную ситуацию в случае неудачного завершения, другие возвращают

какое-либо из значений (null или false в зависимости от типа операции)

Вторая форма добавления элементов в очередь сделана специально для реализаций Deque, имеющих ограничение по размеру. В большинстве реализаций операции добавления заканчиваются успешно

Интерфейс Deque Каждый из этих методов существует в двух формахОдни методы создают исключительную ситуацию в случае неудачного

Слайд 19Интерфейс Deque

Методы addFirst(), addLast() вставляют элементы в начало и

в конец очереди соответственно

Метод add() унаследован от интерфейса Queue

и абсолютно аналогичен методу addLast() интерфейса Deque

Интерфейс Deque Методы addFirst(), addLast() вставляют элементы в начало и в конец очереди соответственно Метод add() унаследован

Слайд 20Доступ к элементам списков
Доступ к элементам списка возможен
по индексу
с помощью

итератора (Iterator)
С явным объявлением итератора
В цикле foreach

Доступ по индексу

for (int

i = 0; i < list.size(); i++){
MyClass elem = (MyClass) list.get(i); // Коллекция не // типизированная
elem.doSome();
}

Для навигации по LinkedList при большом количестве объектов использование доступа по индексу неэффективно

Доступ к элементам списковДоступ к элементам списка возможенпо индексус помощью итератора (Iterator)С явным объявлением итератораВ цикле foreachДоступ

Слайд 21Доступ к элементам списков

Доступ с помощью цикла foreach

List list =

new ArrayList();
// Вывод list
for (String str : list) {
System.out.println(str);
}

Доступ к элементам списковДоступ с помощью цикла foreachList list = new ArrayList();// Вывод listfor (String str :

Слайд 22Итераторы (Iterator)
Итератор – это вспомогательный объект, используемый для перемещения в

одном направлении по коллекции объектов. Он позволяет написать универсальный код,

который не зависит от типа контейнера



Работа с итераторами производится через интерфейс Iterator, который специфицирует методы:
boolean hasNext() – проверяет есть ли еще элементы в коллекции
Object next() – выдает очередной элемент коллекции
void remove() – удаляет последний выбранный элемент из коллекции.


Итераторы (Iterator)Итератор – это вспомогательный объект, используемый для перемещения в одном направлении по коллекции объектов. Он позволяет

Слайд 23Итераторы (Iterator)

Получить итератор для прохода коллекции можно с помощью метода

iterator(), который определен у интерфейса Collection

for (Iterator iter =

collection.iterator(); iter.hasNext();) {
MyClass element = (MyClass) iter.next();
element.doSome();
}

В случае, если в процессе навигации по коллекции ее содержимое изменилось (например, из другого потока), методы доступа к элементам коллекции по итератору будут бросать исключение ConcurrentModificationException
Итераторы (Iterator)Получить итератор для прохода коллекции можно с помощью метода iterator(), который определен у интерфейса Collection 		for

Слайд 24ListIterator
ListIterator более мощная разновидность Iterator, поддерживаемая только классами List

ListIterator

является двусторонним, он может выдавать индексы и значения следующего и

предыдущего элемента

Для создания ListIterator изначально установленного на элемент с индексом n иcпользуется вызов ListIterator(n)
ListIteratorListIterator более мощная разновидность Iterator, поддерживаемая только классами List ListIterator является двусторонним, он может выдавать индексы и

Слайд 25ArrayList: index vs. Iterator
ArrayList list = new ArrayList();

for (int i=0; i

list.add(i);
long a = System.currentTimeMillis();
for (int i=0, n=list.size(); i < n; i++)
list.get(i);
System.out.println(System.currentTimeMillis()-a);
a = System.currentTimeMillis();
for (Iterator i=list.iterator(); i.hasNext(); )
i.next();
System.out.println(System.currentTimeMillis()-a);

ArrayList: index vs. Iterator 	 ArrayList list = new ArrayList();   for (int i=0; i

Слайд 26LinkedList: index vs. Iterator
LinkedList list2 = new LinkedList();

for (int i=0; i

list2.add(i);
a = System.currentTimeMillis();
for (int i=0, n=list2.size(); i < n; i++)
list2.get(i);
System.out.println(System.currentTimeMillis()-a);
a = System.currentTimeMillis();
for (Iterator i=list2.iterator(); i.hasNext(); )
i.next();
System.out.println(System.currentTimeMillis()-a);

LinkedList: index vs. Iterator 	 LinkedList list2 = new LinkedList();   for (int i=0; i

Слайд 27ArrayList vs. LinkedList

ArrayList vs. LinkedList

Слайд 28Иерархия наследования множеств

Иерархия наследования множеств

Слайд 29Интерфейс Set
Set – множество неповторяющихся объектов

Добавление повторяющихся элементов в Set

не вызывает исключений, но они не попадают в множество

Для прохода

по множеству используется интерфейс итератор

Интерфейс SetSet – множество неповторяющихся объектовДобавление повторяющихся элементов в Set не вызывает исключений, но они не попадают

Слайд 30Классы HashSet и LinkedHashSet
Классы HashSet и LinkedHashSet реализуют интерфейс Set

Уникальность

объектов в них обеспечивается благодаря использованию механизма хеширования

Ключ (хэш-код) используется

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

Скорость поиска существенна для коллекций с большим количеством элементов
Классы HashSet и LinkedHashSetКлассы HashSet и LinkedHashSet реализуют интерфейс SetУникальность объектов в них обеспечивается благодаря использованию механизма

Слайд 31Классы HashSet и LinkedHashSet
В HashSet объекты хранятся в произвольном порядке

LinkedHashSet

является наследником класса HashSet. Он хранит объекты в порядке их

добавления

Классы HashSet и LinkedHashSetВ HashSet объекты хранятся в произвольном порядкеLinkedHashSet является наследником класса HashSet. Он хранит объекты

Слайд 32Упорядоченные множества (SortedSet)
Интерфейс SortedSet служит для спецификации упорядоченных множеств

В

JDK его реализация представлена в классе TreeSet (для хранения

объектов использует бинарное дерево)

Упорядоченные множества (SortedSet)Интерфейс SortedSet служит для спецификации упорядоченных множеств В JDK его реализация представлена в классе TreeSet

Слайд 33Упорядоченные множества (SortedSet)

При добавлении объекта в дерево он сразу же

размещается в необходимую позицию с учетом сортировки

Сортировка происходит благодаря

тому, что все добавляемые элементы реализуют интерфейсы Comparator и Comparable

Обработка операций удаления и вставки объектов происходит медленнее, чем в хэш-множествах, но быстрее, чем в списках
Упорядоченные множества (SortedSet)При добавлении объекта в дерево он сразу же размещается в необходимую позицию с учетом сортировки

Слайд 34Упорядоченные множества (SortedSet)

При добавлении нового объекта он становится на свое

место по порядку в множестве:

Set sorted = new TreeSet();
sorted.add(new

Integer(2));
sorted.add(new Integer(3));
sorted.add(new Integer(1));
System.out.println(sorted); // Распечатает [1, 2, 3]
Упорядоченные множества (SortedSet)При добавлении нового объекта он становится на свое место по порядку в множестве:Set sorted =

Слайд 35Интерфейс Comparable
В Java задача задания функции сравнения решается с использованием

интерфейсов Comparable и Comparator

Интерфейс Comparable предназначен для определения так называемого

естественного порядка (natural ordering)

Данный интерфейс содержит всего один метод:
public int compareTo(Object o) // сравнивает // объект с // другим объектом

Интерфейс ComparableВ Java задача задания функции сравнения решается с использованием интерфейсов Comparable и ComparatorИнтерфейс Comparable предназначен для

Слайд 36Интерфейс Comparable

Метод compareTo(T t) возвращает:
отрицательное число, если this < other;
ноль,

если this == other;
положительное число, если this > other.

Дополнительным

условием является то, что метод compareTo(other) должен возвращать 0 тогда и только тогда, когда метод equals(other) возвращает true.
Интерфейс ComparableМетод compareTo(T t) возвращает:отрицательное число, если this < other;ноль, если this == other; положительное число, если

Слайд 37Интерфейс Comparator
Интерфейс Comparator используется, когда метод compareTo() уже переопределен, но

необходимо задать еще какой-то прядок сортировки

Интерфейс Comparator содержит один метод:

public interface Comparator {
int compare(T a, T b);
}

Интерфейс ComparatorИнтерфейс Comparator используется, когда метод compareTo() уже переопределен, но необходимо задать еще какой-то прядок сортировкиИнтерфейс Comparator

Слайд 38Интерфейс Comparator

В этом случае создается отдельный вспомогательный класс, реализующий интерфейс

Comparator, и уже на основании объекта этого класса будет производиться

сортировка

В этом классе нужно реализовать метод compare(T a , T b)
Интерфейс ComparatorВ этом случае создается отдельный вспомогательный класс, реализующий интерфейс Comparator, и уже на основании объекта этого

Слайд 39Пример работы с Deque
import java.util.*;
public class DequeRunner {
public static void

printDeque(Deque d){
for (Object de : d)
System.out.println(de + ";

");
}
public static void main(String[] args) {
Deque deque = new ArrayDeque();
deque.add(new String("5"));
deque.addFirst("A");
//deque.addLast(new Integer(5));//ошибка компиляции
System.out.println( deque.peek());
System.out.println("Before:");
printDeque(deque);
deque.pollFirst();
System.out.println ( deque.remove(5));
System.out.println("After:");
printDeque(deque);
}
}

Пример работы с Dequeimport java.util.*;public class DequeRunner {	public static void printDeque(Deque d){ 			for (Object de : d)

Слайд 40Пример работы с интерфейсом Deque
В данном примере реализована работа

с интерфейсом Deque. Методы addFirst(), addLast() вставляют элементы в начало

и в конец очереди соответственно. Метод add() унаследован от интерфейса Queue и абсолютно аналогичен методу addLast() интерфейса Deque

В результате работы программы на консоль будет выведено:
A
Before:
A;
5;
false
After:
5;

Пример работы с интерфейсом Deque В данном примере реализована работа с интерфейсом Deque. Методы addFirst(), addLast() вставляют

Слайд 41Интерфейс Map
Интерфейс Map; часто называют ассоциативным массивом

Map; осуществляет отображение (mapping)

множества ключей на множество значений. Т.е. объекты хранятся в нем

в виде пар <ключ, значение>

Map; позволяет получить значение по ключу.

В Map; не может быть 2-х пар с одинаковым ключом
Интерфейс MapИнтерфейс Map; часто называют ассоциативным массивомMap; осуществляет отображение (mapping) множества ключей на множество значений. Т.е. объекты

Слайд 42Методы Map
public void put(Object key, Object value) - добавляет новую

пару

public Object get(Object key) – возвращает value по

заданному ключу, или null, если ничего не найдено

public Set keySet() – возвращает множество ключей

boolean containsKey(Object key) – возвращает true, если Map содержит пару с заданным ключем

Методы Mappublic void put(Object key, Object value) - добавляет новую пару public Object get(Object key) – возвращает

Слайд 43Классы HashMap и LinkedHashMap
HashMap – расширяет AbstractMap, используя хэш-таблицу, в

которой ключи отсортированы относительно значений их хэш-кодов

HashMap формирует неупорядоченное

множество ключей, т.е. ключи хранятся в произвольном порядке

LinkedHashMap содержит ключи в порядке их добавления

Классы HashMap и LinkedHashMapHashMap – расширяет AbstractMap, используя хэш-таблицу, в которой ключи отсортированы относительно значений их хэш-кодов

Слайд 44Пример с использованием HashMap
Map map = new HashMap

();

// Заполнить его чем-нибудь

map.put("one", "111");
map.put("two", "222");
map.put("three", "333");
map.put("four", "333");

// Получить и вывести все ключи
System.out.println("Set of keys: " + map.keySet());

// Получить и вывести значение по ключу
String val = map.get("one");
System.out.println("one=" + val);

// Получить и вывести все значения
System.out.println("Collection of values: " + map.values());

// Получить и вывести все пары
System.out.println("Set of entries: " + map.entrySet());
Пример с использованием HashMap Map map = new HashMap ();   // Заполнить его чем-нибудь

Слайд 45Внутренний интерфейс Map.Entry
Интерфейс Map.Entry позволяет работать с объектом, который представляет

собой пару

Каждый элемент ассоциативного массива, описываемого интерфейсом

Map, имеет интерфейсный тип Map.Entry

Метод entrySet(), определенный в интерфейсе Map, позволят получить все элементы ассоциативного массива в виде множества объектов типа Map.Entry

Внутренний интерфейс Map.EntryИнтерфейс Map.Entry позволяет работать с объектом, который представляет собой пару  Каждый элемент ассоциативного массива,

Слайд 46Внутренний интерфейс Map.Entry
Интерфейс cодержит такие методы как:
boolean equals(Object o) - проверяет

эквивалентность двух пар
Object getKey() – возвращает ключ элемента (пары.)
Object getValue()

– возвращает значение элемента (пары).
Object setValue(Object value) –меняет значение элемента (пары)

Проход по всем Entry :

Map map = new LinkedHashMap();
map.put("one", 1);
map.put("two", 2);
// …
for (Map.Entry entry : map.entrySet()) {
System.out.println( entry.getKey() + "=" + entry.getValue());
}

Внутренний интерфейс Map.EntryИнтерфейс cодержит такие методы как:boolean equals(Object o) - проверяет эквивалентность двух парObject getKey() – возвращает ключ

Слайд 47Синхронизированные коллекции
В CollectionsFramework большинство коллекций не синхронизировано
Кроме устаревших типа Vector

Чтобы

сделать синхронизированную коллекцию, нужно воспользоваться методами класса Collections
List synchronizedList(List list)
Map

synchronizedMap(Map m)
Set synchronizedSet(Set s)
и т.д.

В этих методах создается надстройка над передаваемым объектом, реализующая соотв. интерфейс и выполняющая синхронизацию в каждом из методов
Синхронизированные коллекцииВ CollectionsFramework большинство коллекций не синхронизированоКроме устаревших типа VectorЧтобы сделать синхронизированную коллекцию, нужно воспользоваться методами класса

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

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

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

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

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


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

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