SlideShare a Scribd company logo
Язык программирования
JAVA
Лекция# 4
Структуры данных в Java
Моисеенко Антон
canggu@mail.ru
СПГУАП
Кафедра Информационно-Сетевых Технологий
Содержание курса
1. Коллекции
2. Множества
3. Списки
4. Очереди и деки
5. Отображения
6. Заключение
Коллекции
■ Коллекция ─ неупорядоченный
набор элементов
■ Интерфейс Collection
Коллекции в Java
■ «Платформы Java содержат набор
готовых классов, реализующих
механизмы работы со структурами
данных
■ Такие классы называются коллекциями
(collections)
■ Хотя обработка массивов происходит
быстрее, в ряде случаев требуется
использовать коллекции
Предпосылки использования
■ Необходимость динамического изменения
размера структуры данных
■ Динамическое добавление или удаление
элемента
■ Хранение разнотипных элементов
(объектов)
■ Извлечение и манипуляция данными из
БД
■ Хранение и работа со сложными
структурами данных (деревьями,
списками, стеками, хеш- таблицами и
т.д.) и т.п.
Базовые интерфейсы и
классы
■ Интерфейс Collection предназначен для
хранения однородных элементов. Его
расширяют интерфейсы:
■ List – список
■ Set – множество
■ Queue – очередь
■ Интерфейс Map предназначен для
создания коллекций, хранящих пары
«ключ-значение». Его реализуют классы:
■ HashMap
■ IdentityHashMap
■ TreeMap
Интерфейс Collection
Методы интерфейса
Collection
■ boolean add(Object o) – Добавляет элемент в коллекцию;
возвращает true если элемент был добавлен, и false, если
коллекция не позволяет сохранять дубликаты, а
добавляемый элемент таковым является.
■ boolean addAll(Collection coll) – Добавляет все элементы
в коллекцию; возвращает true если какой-либо элемент
был добавлен.
■ void clear() – Удаляет из коллекции все элементы. При
этом те элементы, на кот. имеются ссылки у других
элементов, не удаляются из памяти.
■ boolean contains(Object o) – Возвращает true если
коллекция содержит заданный элемент.
Методы интерфейса
Collection(продолжение)
▪ boolean containsAll(Collection<?> coll) – Возвращает true
если коллекция содержит все элементы из coll.
▪ boolean equals(Object o) – Возвращает true если
сравниваемые коллекции равны.
▪ int hashCode() – Возвращает значение хэш кода для
данной коллекции. Для любого класса, для которого
переопределен метод Object.equals() должен быть
переопределен метод Object.hashCode()
▪ boolean isEmpty() – Возвращает true если коллекция не
содержит элементов.
Методы интерфейса
Collection(продолжение)
■ Iterator iterator() – Возвращает ссылку на объект Iterator,
который позволяет выполнить эффективное,
последовательное прохождение по всем элементам
коллекции.
■ boolean remove(Object o) – Удаляет из коллекции
одиночный экземпляр элемента o; возвращает true, если
коллекция содержит такой элемент.
■ boolean removeAll(Collection<?> coll) – Удаляет их
коллекции все элементы, которые также находятся в
коллекции coll; возвращает true если какой-либо элемент
удален. Никакие элементы в результирующей коллекции
не будут равны элементам коллекции coll. Параметр coll
необязателен.
Методы интерфейса
Collection(продолжение)
■ boolean retainAll(Collection<?> coll) – Оставляет в
коллекции только те из входящих в неё элементов, которые
входят в коллекции coll; возвращает true, если исходная
коллекция изменена.
■ int size() – Возвращает количество элементов в коллекции.
■ Object[] toArray() – Возвращает массив, содержащий все
элементы данной коллекции.
Методы интерфейса
Collection(продолжение)
■ <T> T[] toArray(T[] a) – Возвращает массив, содержащий
все элементы данной коллекции; тип возвращаемого
массива таков, как тип заданного массива. Если коллекция
вмещается в заданный массив, она возвращается в
массиве. В противном случае размещается массив с типом
времени выполнения для заданного массива и размером
равным размеру коллекции.
■ String toString() – Возвращает строку со списком
элементов коллекции в квадратных скобках, через запятую
и пробел
Иерархия классов, реализующих
интерфейсы Collection
Иерархия классов и
интерфейсов Map
Специфика хранения
элементов
■ Коллекции могут хранить только ссылки
на объекты.
■ Примитивные типы могут быть сохранены
в коллекции и извлечены из неё за счёт
автоматических операций упаковки и
распаковки в классы-оболочки (Boxing и
Unboxing, с Java SE 5)
■ Начиная с версии Java SE 5, коллекции
стали типизированными и при их создании
рекомендуется указывать тип объектов,
кот. будут храниться в ней
ArrayList<String> arr = new ArrayList<String>();
Пример. Вывод коллекции на экран
public void dump(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); ) {
String word = (String) i.next();
System.out.print(word + ", ");
}
System.out.println();
}
Преобразование в массив
■ Object[] toArray() ─ создает новый массив
■ Object[] toArray(Object[] a) ─ использует переданный
массив
■ Пример использования
String[] i = (String[])c.toArray(new String[c.size()]);
Итераторы
■ Итератор ─ обход коллекции
■ Интерфейс Iterator
■ Метод Iterator Collection.iterator()
Методы итераторов
■ hasNext() ─ определение наличия следующего
элемента
■ next() ─ взятие следующего элемента
■ remove() ─ удаление элемента
■ Исключения
○ NoSuchElementException ─ бросается при
достижении конца коллекции
○ ConcurrentModificationException ─ бросается при
изменении коллекции
Применение итераторов
■ Обход коллекции
for(Iterator i = c.iterator(); i.hasNext(); ) {
Object element = i.next();
...
}
■ Фильтрование коллекции
for(Iterator i = c.iterator(); i.hasNext(); ) {
if (!((String)i.next()).equals(“Bla-bla”)) i.remove();
}
Пример работы с итераторами
List compon = Arrays.asList(this.getComponents());
for (Iterator iter=compon.iterator(); iter.hasNext(); ) {
Object elem = (Object) iter.next();
System.out.println(“Компонент: ”, elem.toString();
}
Множества
■ Множество ─ коллекция без
повторяющихся элементов
■ Интерфейс Set
Интерфейс Set
Сравнение элементов
■ Метод Object.equals(Object object)
■ Рефлексивность
o1.equals(o1)
■ Симметричность
o1.equals(o2) == e2.equals(o1)
■ Транзитивность
o1.equals(o2) && o2.equals(o3) => o1.equals(o3)
■ Устойчивость
o1.equals(o2) не изменяется, если o1 и o2 не
изменяются
■ Обработка null
o1.equals(null) == false
Операции над множествами
■ addAll(Collection c) – объединение
множеств
■ retainAll(Collection c) – пересечение
множеств
■ containsAll(Collection c) – проверка
вхождения
■ removeAll(Collection c) – разность
множеств
Классы, реализующие Set
■ HashSet ─ множество на основе хэша
■ LinkedHashSet ─ множество на основе
хэша c сохранение порядка обхода
■ TreeSet - коллекция, которая хранит
свои элементы в виде упорядоченного
по значениям дерева.
Конструкторы HashSet
■ HashSet() ─ пустое множество
■ HashSet(Collection c) ─ элементы
коллекции
■ HashSet(int initialCapacity) ─
начальная вместимость
■ HashSet(int initialCapacity, double
loadFactor) ─ начальная
вместимость и степень заполнения
Вычисление хэшей
■ Метод Object.hashCode()
■ Устойчивость hashCode() не
изменяется, если объект не
изменяется
■ Согласованность с equals
o1.equals(o2) => o1.hashCode() ==
o2.hashCode()
Списки
■ Представляет собой неупорядоченную коллекцию, в которой
допустимы дублирующие значения
■ Классы, реализующие List:
■ LinkedList – связанный список, можно вставлять элементы
только в начало и конец
■ ArrayList – динамический массив с произвольной вставкой и
удалением элементов
■ Элементы, находящиеся в коллекции List проиндексированы
Списки
Методы интерфейса List
■ <T>Elem get(int i) – Возвращает ссылку на элемент
списка под номером i
■ int indexOf(<T> obj) – Возвращает индекс (номер)
элемента obj. Если объект не найден, возвращает -
1.
■ ListIterator listIterator([int i]) – Возвращает итератор
списка с дополнительными возможностями (по
сравнению с Iterator). Если указан параметр i, то
итератор будет позиционирован на элемент с
индексом i
Методы интерфейса List
■ boolean remove(int i) – удаляет из списка элемент с
номером i.
■ set(int i, <T> obj) – заменяет элемент с номером i на
указанный элемент obj
■ List subList(i1, i2) – возвращает ссылку на
подсписок, содержащий элементы исходного списка
с номерами от i1 до i2
Методы класса Collections
■ Collections.addAll(c,e1,e2,…,en) – добавляет в
коллекцию c произвольное число элементов e1, …,
en
■ frequency(c, obj) – возвращает число вхождений
элемента obj в коллекцию с
■ reverse(list) – обращает порядок следования
элементов в списке list
■ sort(list) – сортирует список в порядке возрастания
элементов. Сравнение идёт с помощью вызова
метода e1.compareTo(e2) для элементов списка e1,
e2
Итератор по списку
■ Интерфейс ListIterator extends Iterator
■ Метод listIterator()
■ Предыдущий / Следующий элементы
Операции итератора по списку
■ Передвижение
○ hasNext() / hasPrevious() ─ проверка
○ next() / previous() ─ взятие элемента
○ nextIndex() / previousIndex() ─
определение индекса
■ Изменение
○ remove() ─ удаление элемента
○ set(Object e) ─ изменение элемента
○ add(Object e) ─ добавление элемента
Класс ArrayList
■ ArrayList ─ список на базе массива
■ порожден от класса AbstractList для
реализации списка, основанного на
динамически изменяющемся массиве
■ Нет методы addFirst() и addLast(), но есть
метод void add( int index, E element ) для
вставки элемента в произвольную позицию
Класс ArrayList
■ Плюсы
○ Быстрый доступ по индексу
○ Быстрая вставка и удаление элементов с
конца
■ Минусы
○ Медленная вставка и удаление
элементов
Вместимость ArrayList
■ Вместимость ─ реальное количество
элементов
■ Дополнительные методы
○ ensureCapacity(int c) ─ определение
вместимости
○ trimToSize() ─ “подгонка” вместимости
Конструкторы ArrayList
■ ArrayList() ─ пустой список
■ ArrayList(Collection c) ─ копия
коллекции
■ ArrayList(int initialCapacity) ─ пустой
список заданной вместимости
Применения ArrayList
■ “Бесконечный” массив
■ Стек
Пример использования ArrayList
public static void main(String args[]){
String s = "test";
List<String> list = new ArrayList<String>();
list.add( "is" );
list.add( "is" );
list.add( "a" );
list.add( "a" );
list.add( null );
list.add( list.size(), s );
list.add( 0, "This");
// list.add( new Double(12.4) ); ошибка компиляции
System.out.println( list );
displayCollection( list );
}
…
Пример использования ArrayList
Результат:
[This, is, is, a, a, null, test]
The size of the Collection is : 7
This is is a a null test
Класс LinkedList
■ LinkedList ─ двусвязный список
■ Порожден от класса
AbstractSequentialList
■ Реализация связанного
двунаправленного списка – каждый
элемент ссылается на предыдущий и на
последующий элементы
■ Есть методы addFirst() и addLast()
Класс LinkedList
■ Создаётся типизированная коллекция, в которой
могут храниться только элементы типа String:
■ LinkedList<String> list = new LinkedList<String>();
■ Любая попытка внести в список ссылку на объект
другого типа приведет к ошибке компиляции:
■ list.add( new Double(12.4) );
■ Плюсы
○ Быстрое добавление и удаление элементов
■ Минусы
○ Медленный доступ по индексу
Возможности LinkedList
■ Конструкторы
○ LinkedList() ─ пустой список
○ LinkedList(Collection c) ─ копия коллекции
■ Методы
○ addFirst(Object o) – добавить в начало
списка
○ addLast(Object o) – добавить в конец списка
○ removeFirst() – удалить первый элемент
○ removeLast() – удалить последний элемент
Применения LinkedList
■ Стек
■ Очередь
■ Дек
Пример. Вывод LinkedList на
экран
Пример использования LinkedList
import java.util.*;
public class TestList {
public static void main(String args[]){
String s = "test";
LinkedList<String> list = new LinkedList<String>();
list.add( "is" );
list.add( "is" );
list.add( "a" );
list.add( "a" );
list.add( null );
list.addLast( s );
list.addFirst("This");
// list.add( new Double(12.4) ); ошибка компиляции
System.out.println( list );
displayCollection( list );
}
Пример. Вывод LinkedList на
экран
static void displayCollection( Collection<String> items ) {
final String BLANK = " ";
System.out.println("The size of the Collection is : " +items.size());
StringBuilder sb = new StringBuilder();
for( String s : items ) sb.append( s ).append( BLANK );
System.out.println( sb.toString() );
}
}
Результат: [This, is, is, a, a, null, test]
The size of the Collection is : 7
This is is a a null test
Очередь
Очередь
■ Очередь – хранилище элементов для
обработки
■ Интерфейс Queue
■ Свойства очередей
○ Порядок выдачи элементов
определяется конкретной реализацией
○ Очереди не могут хранить null
○ У очереди может быть ограничен
размер
Методы очередей
■ Обычные методы
○ add(Object o) – добавить элемент
■ Бросает UnsupportedOperationException
○ Object element() – вершина очереди
■ Бросает NoSuchElementException
○ Object remove() – удалить элемент из вершины
■ Бросает NoSuchElementException
■ Методы, не бросающие исключений
○ offer(Object o) – добавить элемент
○ Object peek() – вершина очереди
○ Object poll() – удалить элемент из вершины
Отображение
Отображение
■ Отображение ─ множество пар ключ-значение
при уникальности ключа
■ Интерфейс Map
Методы отображений
■ Доступ
○ get(Object k) ─ получение значение
○ put(Object k, Object v) ─ запись
○ remove(Object k) ─ удаление
■ Проверки
○ containsKey(Object k) ─ наличие ключа
○ containsValue(Object v) ─ наличие значения
■ Определения размера
○ size() ─ размер отображения
○ isEmpty() ─ проверка на пустоту
Методы отображений
■ Взятие видов
○ entrySet() ─ множество пар
○ values() ─ коллекция значений
○ keySet() ─ множество ключей
■ Массовые операции
○ putAll(Map map) ─ добавление всех
пар
Пары
■ Пара ─ ключ + значение
■ Интерфейс Map.Entry
■ Методы
○ Object getKey()
○ Object getValue()
○ setValue(Object v)
Классы HashMap и LinkedHashMap
■ HashMap ─ отображение на основе
хэшей
■ LinkedHashMap ─ отображение на
основе хэшей с сохранением
порядка обхода
Конструкторы HashMap
■ HashMap() ─ пустое отображение
■ HashMap(Map m) ─ копия
отображения
■ HashMap(int initialCapacity) ─
начальная вместимость
■ HashMap (int initialCapacity, int
loadFactor) ─ начальная
вместимость и степень заполнения
Вопросы?

More Related Content

PPTX
Коллекции в Java
PPTX
Collections
PPT
Java. Интерфейс Set - наборы (множества) и его реализации.
PDF
Scala and LiftWeb presentation (Russian)
PDF
PPTX
Основы Java. 4. Collection Framework
PDF
Очень вкусный фрукт Guava
PDF
[JAM 1.1] Clean Code (Paul Malikov)
Коллекции в Java
Collections
Java. Интерфейс Set - наборы (множества) и его реализации.
Scala and LiftWeb presentation (Russian)
Основы Java. 4. Collection Framework
Очень вкусный фрукт Guava
[JAM 1.1] Clean Code (Paul Malikov)

What's hot (18)

PPT
PPT
Лекция 3 Элементарные структуры данных Часть 1
PDF
Scala on android
PDF
Sergii Tsypanov "Performance 1001 Tips"
ODP
PPT
9. java lecture library
PPT
10. java lecture generics&collections
PPTX
C#. От основ к эффективному коду
PDF
Scala
PDF
Олег Алистратов — Сортировка списков в Perl и Python
PDF
AlgoCollections (RUS)
PDF
Магия метаклассов
PPTX
PDF
Python dict: прошлое, настоящее, будущее
PPT
8. java lecture threads
PPTX
Функциональное программирование на F#
PPT
3. java lecture classes
PDF
Обработка текста на Haskell - это просто!
Лекция 3 Элементарные структуры данных Часть 1
Scala on android
Sergii Tsypanov "Performance 1001 Tips"
9. java lecture library
10. java lecture generics&collections
C#. От основ к эффективному коду
Scala
Олег Алистратов — Сортировка списков в Perl и Python
AlgoCollections (RUS)
Магия метаклассов
Python dict: прошлое, настоящее, будущее
8. java lecture threads
Функциональное программирование на F#
3. java lecture classes
Обработка текста на Haskell - это просто!
Ad

Similar to Java Core. Lecture# 4. Collections. (20)

PDF
05 - Java. Collections Framework и Generics
PDF
PDF
C# Desktop. Занятие 05.
PPT
List - списки
PPTX
Binary Studio Academy 2016. Data structures and LINQ
PDF
Java осень 2014 занятие 2
PPT
модуль 13 использование коллекций
PDF
Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработк...
PDF
Объектно-ориентированное программирование. Лекции 9 и 10
ODP
Контейнеры и хранение объектов в ООП
PDF
PDF
лек9 10
PDF
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
PDF
Лекция 5. Встроенные коллекции и модуль collections.
PPT
Msu.Center.Lectures.J04 Std Libs
PPT
04 Стандартная Библиотека
PPT
Lec 2 Java
PPT
Java. Интерфейс Map - ассоциативные массивы.
PDF
SCINO. Android для начинающих. Занятие 4
PDF
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
05 - Java. Collections Framework и Generics
C# Desktop. Занятие 05.
List - списки
Binary Studio Academy 2016. Data structures and LINQ
Java осень 2014 занятие 2
модуль 13 использование коллекций
Лекция №5. Линейные структуры данных. Предмет "Структуры и алгоритмы обработк...
Объектно-ориентированное программирование. Лекции 9 и 10
Контейнеры и хранение объектов в ООП
лек9 10
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Лекция 5. Встроенные коллекции и модуль collections.
Msu.Center.Lectures.J04 Std Libs
04 Стандартная Библиотека
Lec 2 Java
Java. Интерфейс Map - ассоциативные массивы.
SCINO. Android для начинающих. Занятие 4
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Ad

More from Anton Moiseenko (10)

PPTX
Design of Information Systems. Lecture #1. XML
PPTX
Java core-lect6-part3-annotation.ppt
PPTX
Java core-lect6-part2-reflection-api.ppt
PPTX
Java Core. Lecture#6. Part#1. Generics.
PPTX
Java Core. Lecture# 5. Concurrency.
PPTX
Java Core. Lecture# 3. Part# 2. Exceptions.
PPTX
Java Core. Lecture# 3. Part# 3. Multithreading.
PPTX
Java Core. Lecture# 3. Part# 1. Abstract classes.
PPTX
Java Core. Lecture# 2. Classes & objects.
PPTX
Java Core. Lecture# 1. Intro
Design of Information Systems. Lecture #1. XML
Java core-lect6-part3-annotation.ppt
Java core-lect6-part2-reflection-api.ppt
Java Core. Lecture#6. Part#1. Generics.
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 1. Intro

Java Core. Lecture# 4. Collections.

  • 1. Язык программирования JAVA Лекция# 4 Структуры данных в Java Моисеенко Антон canggu@mail.ru СПГУАП Кафедра Информационно-Сетевых Технологий
  • 2. Содержание курса 1. Коллекции 2. Множества 3. Списки 4. Очереди и деки 5. Отображения 6. Заключение
  • 3. Коллекции ■ Коллекция ─ неупорядоченный набор элементов ■ Интерфейс Collection
  • 4. Коллекции в Java ■ «Платформы Java содержат набор готовых классов, реализующих механизмы работы со структурами данных ■ Такие классы называются коллекциями (collections) ■ Хотя обработка массивов происходит быстрее, в ряде случаев требуется использовать коллекции
  • 5. Предпосылки использования ■ Необходимость динамического изменения размера структуры данных ■ Динамическое добавление или удаление элемента ■ Хранение разнотипных элементов (объектов) ■ Извлечение и манипуляция данными из БД ■ Хранение и работа со сложными структурами данных (деревьями, списками, стеками, хеш- таблицами и т.д.) и т.п.
  • 6. Базовые интерфейсы и классы ■ Интерфейс Collection предназначен для хранения однородных элементов. Его расширяют интерфейсы: ■ List – список ■ Set – множество ■ Queue – очередь ■ Интерфейс Map предназначен для создания коллекций, хранящих пары «ключ-значение». Его реализуют классы: ■ HashMap ■ IdentityHashMap ■ TreeMap
  • 8. Методы интерфейса Collection ■ boolean add(Object o) – Добавляет элемент в коллекцию; возвращает true если элемент был добавлен, и false, если коллекция не позволяет сохранять дубликаты, а добавляемый элемент таковым является. ■ boolean addAll(Collection coll) – Добавляет все элементы в коллекцию; возвращает true если какой-либо элемент был добавлен. ■ void clear() – Удаляет из коллекции все элементы. При этом те элементы, на кот. имеются ссылки у других элементов, не удаляются из памяти. ■ boolean contains(Object o) – Возвращает true если коллекция содержит заданный элемент.
  • 9. Методы интерфейса Collection(продолжение) ▪ boolean containsAll(Collection<?> coll) – Возвращает true если коллекция содержит все элементы из coll. ▪ boolean equals(Object o) – Возвращает true если сравниваемые коллекции равны. ▪ int hashCode() – Возвращает значение хэш кода для данной коллекции. Для любого класса, для которого переопределен метод Object.equals() должен быть переопределен метод Object.hashCode() ▪ boolean isEmpty() – Возвращает true если коллекция не содержит элементов.
  • 10. Методы интерфейса Collection(продолжение) ■ Iterator iterator() – Возвращает ссылку на объект Iterator, который позволяет выполнить эффективное, последовательное прохождение по всем элементам коллекции. ■ boolean remove(Object o) – Удаляет из коллекции одиночный экземпляр элемента o; возвращает true, если коллекция содержит такой элемент. ■ boolean removeAll(Collection<?> coll) – Удаляет их коллекции все элементы, которые также находятся в коллекции coll; возвращает true если какой-либо элемент удален. Никакие элементы в результирующей коллекции не будут равны элементам коллекции coll. Параметр coll необязателен.
  • 11. Методы интерфейса Collection(продолжение) ■ boolean retainAll(Collection<?> coll) – Оставляет в коллекции только те из входящих в неё элементов, которые входят в коллекции coll; возвращает true, если исходная коллекция изменена. ■ int size() – Возвращает количество элементов в коллекции. ■ Object[] toArray() – Возвращает массив, содержащий все элементы данной коллекции.
  • 12. Методы интерфейса Collection(продолжение) ■ <T> T[] toArray(T[] a) – Возвращает массив, содержащий все элементы данной коллекции; тип возвращаемого массива таков, как тип заданного массива. Если коллекция вмещается в заданный массив, она возвращается в массиве. В противном случае размещается массив с типом времени выполнения для заданного массива и размером равным размеру коллекции. ■ String toString() – Возвращает строку со списком элементов коллекции в квадратных скобках, через запятую и пробел
  • 15. Специфика хранения элементов ■ Коллекции могут хранить только ссылки на объекты. ■ Примитивные типы могут быть сохранены в коллекции и извлечены из неё за счёт автоматических операций упаковки и распаковки в классы-оболочки (Boxing и Unboxing, с Java SE 5) ■ Начиная с версии Java SE 5, коллекции стали типизированными и при их создании рекомендуется указывать тип объектов, кот. будут храниться в ней ArrayList<String> arr = new ArrayList<String>();
  • 16. Пример. Вывод коллекции на экран public void dump(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ) { String word = (String) i.next(); System.out.print(word + ", "); } System.out.println(); }
  • 17. Преобразование в массив ■ Object[] toArray() ─ создает новый массив ■ Object[] toArray(Object[] a) ─ использует переданный массив ■ Пример использования String[] i = (String[])c.toArray(new String[c.size()]);
  • 18. Итераторы ■ Итератор ─ обход коллекции ■ Интерфейс Iterator ■ Метод Iterator Collection.iterator()
  • 19. Методы итераторов ■ hasNext() ─ определение наличия следующего элемента ■ next() ─ взятие следующего элемента ■ remove() ─ удаление элемента ■ Исключения ○ NoSuchElementException ─ бросается при достижении конца коллекции ○ ConcurrentModificationException ─ бросается при изменении коллекции
  • 20. Применение итераторов ■ Обход коллекции for(Iterator i = c.iterator(); i.hasNext(); ) { Object element = i.next(); ... } ■ Фильтрование коллекции for(Iterator i = c.iterator(); i.hasNext(); ) { if (!((String)i.next()).equals(“Bla-bla”)) i.remove(); }
  • 21. Пример работы с итераторами List compon = Arrays.asList(this.getComponents()); for (Iterator iter=compon.iterator(); iter.hasNext(); ) { Object elem = (Object) iter.next(); System.out.println(“Компонент: ”, elem.toString(); }
  • 22. Множества ■ Множество ─ коллекция без повторяющихся элементов ■ Интерфейс Set
  • 24. Сравнение элементов ■ Метод Object.equals(Object object) ■ Рефлексивность o1.equals(o1) ■ Симметричность o1.equals(o2) == e2.equals(o1) ■ Транзитивность o1.equals(o2) && o2.equals(o3) => o1.equals(o3) ■ Устойчивость o1.equals(o2) не изменяется, если o1 и o2 не изменяются ■ Обработка null o1.equals(null) == false
  • 25. Операции над множествами ■ addAll(Collection c) – объединение множеств ■ retainAll(Collection c) – пересечение множеств ■ containsAll(Collection c) – проверка вхождения ■ removeAll(Collection c) – разность множеств
  • 26. Классы, реализующие Set ■ HashSet ─ множество на основе хэша ■ LinkedHashSet ─ множество на основе хэша c сохранение порядка обхода ■ TreeSet - коллекция, которая хранит свои элементы в виде упорядоченного по значениям дерева.
  • 27. Конструкторы HashSet ■ HashSet() ─ пустое множество ■ HashSet(Collection c) ─ элементы коллекции ■ HashSet(int initialCapacity) ─ начальная вместимость ■ HashSet(int initialCapacity, double loadFactor) ─ начальная вместимость и степень заполнения
  • 28. Вычисление хэшей ■ Метод Object.hashCode() ■ Устойчивость hashCode() не изменяется, если объект не изменяется ■ Согласованность с equals o1.equals(o2) => o1.hashCode() == o2.hashCode()
  • 29. Списки ■ Представляет собой неупорядоченную коллекцию, в которой допустимы дублирующие значения ■ Классы, реализующие List: ■ LinkedList – связанный список, можно вставлять элементы только в начало и конец ■ ArrayList – динамический массив с произвольной вставкой и удалением элементов ■ Элементы, находящиеся в коллекции List проиндексированы
  • 31. Методы интерфейса List ■ <T>Elem get(int i) – Возвращает ссылку на элемент списка под номером i ■ int indexOf(<T> obj) – Возвращает индекс (номер) элемента obj. Если объект не найден, возвращает - 1. ■ ListIterator listIterator([int i]) – Возвращает итератор списка с дополнительными возможностями (по сравнению с Iterator). Если указан параметр i, то итератор будет позиционирован на элемент с индексом i
  • 32. Методы интерфейса List ■ boolean remove(int i) – удаляет из списка элемент с номером i. ■ set(int i, <T> obj) – заменяет элемент с номером i на указанный элемент obj ■ List subList(i1, i2) – возвращает ссылку на подсписок, содержащий элементы исходного списка с номерами от i1 до i2
  • 33. Методы класса Collections ■ Collections.addAll(c,e1,e2,…,en) – добавляет в коллекцию c произвольное число элементов e1, …, en ■ frequency(c, obj) – возвращает число вхождений элемента obj в коллекцию с ■ reverse(list) – обращает порядок следования элементов в списке list ■ sort(list) – сортирует список в порядке возрастания элементов. Сравнение идёт с помощью вызова метода e1.compareTo(e2) для элементов списка e1, e2
  • 34. Итератор по списку ■ Интерфейс ListIterator extends Iterator ■ Метод listIterator() ■ Предыдущий / Следующий элементы
  • 35. Операции итератора по списку ■ Передвижение ○ hasNext() / hasPrevious() ─ проверка ○ next() / previous() ─ взятие элемента ○ nextIndex() / previousIndex() ─ определение индекса ■ Изменение ○ remove() ─ удаление элемента ○ set(Object e) ─ изменение элемента ○ add(Object e) ─ добавление элемента
  • 36. Класс ArrayList ■ ArrayList ─ список на базе массива ■ порожден от класса AbstractList для реализации списка, основанного на динамически изменяющемся массиве ■ Нет методы addFirst() и addLast(), но есть метод void add( int index, E element ) для вставки элемента в произвольную позицию
  • 37. Класс ArrayList ■ Плюсы ○ Быстрый доступ по индексу ○ Быстрая вставка и удаление элементов с конца ■ Минусы ○ Медленная вставка и удаление элементов
  • 38. Вместимость ArrayList ■ Вместимость ─ реальное количество элементов ■ Дополнительные методы ○ ensureCapacity(int c) ─ определение вместимости ○ trimToSize() ─ “подгонка” вместимости
  • 39. Конструкторы ArrayList ■ ArrayList() ─ пустой список ■ ArrayList(Collection c) ─ копия коллекции ■ ArrayList(int initialCapacity) ─ пустой список заданной вместимости
  • 41. Пример использования ArrayList public static void main(String args[]){ String s = "test"; List<String> list = new ArrayList<String>(); list.add( "is" ); list.add( "is" ); list.add( "a" ); list.add( "a" ); list.add( null ); list.add( list.size(), s ); list.add( 0, "This"); // list.add( new Double(12.4) ); ошибка компиляции System.out.println( list ); displayCollection( list ); } …
  • 42. Пример использования ArrayList Результат: [This, is, is, a, a, null, test] The size of the Collection is : 7 This is is a a null test
  • 43. Класс LinkedList ■ LinkedList ─ двусвязный список ■ Порожден от класса AbstractSequentialList ■ Реализация связанного двунаправленного списка – каждый элемент ссылается на предыдущий и на последующий элементы ■ Есть методы addFirst() и addLast()
  • 44. Класс LinkedList ■ Создаётся типизированная коллекция, в которой могут храниться только элементы типа String: ■ LinkedList<String> list = new LinkedList<String>(); ■ Любая попытка внести в список ссылку на объект другого типа приведет к ошибке компиляции: ■ list.add( new Double(12.4) ); ■ Плюсы ○ Быстрое добавление и удаление элементов ■ Минусы ○ Медленный доступ по индексу
  • 45. Возможности LinkedList ■ Конструкторы ○ LinkedList() ─ пустой список ○ LinkedList(Collection c) ─ копия коллекции ■ Методы ○ addFirst(Object o) – добавить в начало списка ○ addLast(Object o) – добавить в конец списка ○ removeFirst() – удалить первый элемент ○ removeLast() – удалить последний элемент
  • 47. Пример. Вывод LinkedList на экран Пример использования LinkedList import java.util.*; public class TestList { public static void main(String args[]){ String s = "test"; LinkedList<String> list = new LinkedList<String>(); list.add( "is" ); list.add( "is" ); list.add( "a" ); list.add( "a" ); list.add( null ); list.addLast( s ); list.addFirst("This"); // list.add( new Double(12.4) ); ошибка компиляции System.out.println( list ); displayCollection( list ); }
  • 48. Пример. Вывод LinkedList на экран static void displayCollection( Collection<String> items ) { final String BLANK = " "; System.out.println("The size of the Collection is : " +items.size()); StringBuilder sb = new StringBuilder(); for( String s : items ) sb.append( s ).append( BLANK ); System.out.println( sb.toString() ); } } Результат: [This, is, is, a, a, null, test] The size of the Collection is : 7 This is is a a null test
  • 50. Очередь ■ Очередь – хранилище элементов для обработки ■ Интерфейс Queue ■ Свойства очередей ○ Порядок выдачи элементов определяется конкретной реализацией ○ Очереди не могут хранить null ○ У очереди может быть ограничен размер
  • 51. Методы очередей ■ Обычные методы ○ add(Object o) – добавить элемент ■ Бросает UnsupportedOperationException ○ Object element() – вершина очереди ■ Бросает NoSuchElementException ○ Object remove() – удалить элемент из вершины ■ Бросает NoSuchElementException ■ Методы, не бросающие исключений ○ offer(Object o) – добавить элемент ○ Object peek() – вершина очереди ○ Object poll() – удалить элемент из вершины
  • 53. Отображение ■ Отображение ─ множество пар ключ-значение при уникальности ключа ■ Интерфейс Map
  • 54. Методы отображений ■ Доступ ○ get(Object k) ─ получение значение ○ put(Object k, Object v) ─ запись ○ remove(Object k) ─ удаление ■ Проверки ○ containsKey(Object k) ─ наличие ключа ○ containsValue(Object v) ─ наличие значения ■ Определения размера ○ size() ─ размер отображения ○ isEmpty() ─ проверка на пустоту
  • 55. Методы отображений ■ Взятие видов ○ entrySet() ─ множество пар ○ values() ─ коллекция значений ○ keySet() ─ множество ключей ■ Массовые операции ○ putAll(Map map) ─ добавление всех пар
  • 56. Пары ■ Пара ─ ключ + значение ■ Интерфейс Map.Entry ■ Методы ○ Object getKey() ○ Object getValue() ○ setValue(Object v)
  • 57. Классы HashMap и LinkedHashMap ■ HashMap ─ отображение на основе хэшей ■ LinkedHashMap ─ отображение на основе хэшей с сохранением порядка обхода
  • 58. Конструкторы HashMap ■ HashMap() ─ пустое отображение ■ HashMap(Map m) ─ копия отображения ■ HashMap(int initialCapacity) ─ начальная вместимость ■ HashMap (int initialCapacity, int loadFactor) ─ начальная вместимость и степень заполнения