Java_amm_lesson_4

Содержание

Слайд 2

В предыдущих сериях

Static методы и переменные в Java – механизм, иногда использующийся,

В предыдущих сериях Static методы и переменные в Java – механизм, иногда
но в целом нарушающий ООП
Передача по ссылке и по значению – в Java примитивы передаются по значению, а объекты – по значению ссылки
Неизменяемые объекты – объекты, состояние которых невозможно изменить (все обертки над примитивами Java)
Класс Object – предок всех классов в Java. Методы equals, toString и hashCode – часто переопределяются

Слайд 3

Глава 5.1
Классические структуры данных

Глава 5.1 Классические структуры данных

Слайд 4

Структуры данных

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

Структуры данных Набор однотипных данных Основные структуры данных присутствуют в большинстве языков
их удобными для определенных операций
Каждая структура данных имеет свои плюсы и минусы

Слайд 5

Массивы

1

5

6

42

3

2

null

null

Лежат в памяти целым «куском»
Элементы проиндексированны
Чтобы вставить элемент в середину, нужно «сдвинуть»

Массивы 1 5 6 42 3 2 null null Лежат в памяти
элементы справа
Вставка в конец очень быстрая
Получение элемента по индексу очень быстрое
Если не хватает размера, нужно создать новый массив, и скопировать его данные из старого

Слайд 6

Оценим сложности стандартных операций

1

5

6

42

3

2

null

null

Получение по индексу
Вставка вконец
Вставка в середину и в начало
Удаление

Оценим сложности стандартных операций 1 5 6 42 3 2 null null
последнего элемента
Удаление элемента из середины

Слайд 7

Связные списки

1

5

6

42

null

Состоят из узлов - Node
Каждая нода имеет как минимум ссылку на

Связные списки 1 5 6 42 null Состоят из узлов - Node
следующий элемент(односвязный список)
Как правило, эффективен только когда надо много вставлять в середину

next

next

next

next

Слайд 8

Оценим сложности стандартных операций

1

5

6

42

null

Получение по индексу
Вставка вконец
Вставка в середину и в начало
Удаление

Оценим сложности стандартных операций 1 5 6 42 null Получение по индексу
последнего элемента
Удаление элемента из середины

next

next

next

next

Слайд 9

Деревья

Чаще всего используются для поиска
Некоторые умеет автобалансироваться

8

3

1

6

4

7

10

14

13

Деревья Чаще всего используются для поиска Некоторые умеет автобалансироваться 8 3 1

Слайд 10

Бинарное дерево

Оценим сложность поиска

8

3

1

6

4

7

10

14

13

Бинарное дерево Оценим сложность поиска 8 3 1 6 4 7 10 14 13

Слайд 11

Ассоциативный массив

1

Вася

56

Петя

14

Коля

11

Света

Ключ – значение
Как правило используется для получение элемента по ключу
Оценивать не

Ассоциативный массив 1 Вася 56 Петя 14 Коля 11 Света Ключ –
будем (пока ☺)

Слайд 12

Глава 5.1.1
Интерфейсы
Comparable и Comparator

Глава 5.1.1 Интерфейсы Comparable и Comparator

Слайд 13

Сравнение объектов на «больше» и «меньше» в Java

В Java часто приходится сравнивать

Сравнение объектов на «больше» и «меньше» в Java В Java часто приходится
объекты не только на равенство, но и на «больше» и «меньше»
Существует 2 способа сравнивать объекты в Java – реализовывать интерфейс Comparable или Comparator

Слайд 14

Интерфейс Comparable

Ноль, если два объекта равны
число >0, если первый объект (на котором

Интерфейс Comparable Ноль, если два объекта равны число >0, если первый объект
вызывается метод) больше, чем второй (который передается в качестве параметра);
число <0, если первый объект меньше второго

compareTo возвращает:

Слайд 15

Интерфейс Comparable

«Дженерик», в данном случае говорит, что мы сравниваем Vehicle

Интерфейс Comparable «Дженерик», в данном случае говорит, что мы сравниваем Vehicle

Слайд 16

Интерфейс Comparator

Метод получения или «геттер» для серийного номера

Интерфейс Comparator Метод получения или «геттер» для серийного номера

Слайд 17

Вопросы и ответы

Вопросы и ответы

Слайд 18

Глава 5.2
Коллекции в Java

Глава 5.2 Коллекции в Java

Слайд 19

Коллекции

Очень часто при разработке приходится хранить наборы одинаковых данных (мы уже встречали

Коллекции Очень часто при разработке приходится хранить наборы одинаковых данных (мы уже
массивы)
Обычные массивы не очень удобны, т.к. они не расширяются автоматически, да и не имеют какого-то удобного API
Коллекции в Java используются как раз для хранения массивов данных.
Есть 2 основные ветки в Java Collection Framework.

Слайд 20

Коллекции

Основа первой ветки – интерфейс Iterable
Iterable можно воспринимать как свойство “перечесляемый”, может

Коллекции Основа первой ветки – интерфейс Iterable Iterable можно воспринимать как свойство
отдать iterator с помощью метода iterator()
Все что Iterable можно использовать в цикле foreach (начиная с 5 Java)
В более старых версиях «пройтись» по каждому элементу струтуры данных можно было с помощью Iterator
Заметим, что в Iterator нет операции получения по индексу

Слайд 22

Iterator

Так жили в Java в доисторические времена

Iterator Так жили в Java в доисторические времена

Слайд 23

Коллекция - интерфейс

Коллекция добавляет операции add, contains
Так же в коллекциях появляется remove

Коллекция - интерфейс Коллекция добавляет операции add, contains Так же в коллекциях
конкретного элемента
Основные интерфейсы наследники коллекций – List, Set, Queue

Слайд 24

Коллекция - интерфейс

Коллекция - интерфейс

Слайд 25

Set

Множество (то есть элементы уникальны)
Хранит каждый элемент 1 раз (проверяется с помощью

Set Множество (то есть элементы уникальны) Хранит каждый элемент 1 раз (проверяется
equals)
Можно пройтись по всем элементам
Можно проверить, содержит ли Set существующий элемент
Нельзя получить элемент по индексу

Слайд 27

Set: популярные реализации

HashSet – самая популярная реализация. Использует хеш код для ускорения

Set: популярные реализации HashSet – самая популярная реализация. Использует хеш код для
производительности
LinkedHashSet – поддерживает порядок вставки
TreeSet – наследует SortedSet, внутри красно-черное дерево. Туда можно положить только элементы, которые можно сравнивать (реализуют Comparable) или нужно передать специальный Comparator.

Слайд 28

List

List – список. Основная фича – получение элементов по индексу
Две самые известные

List List – список. Основная фича – получение элементов по индексу Две
реализации – ArrayList и LinkedList
Чаще всего используют ArrayList

Слайд 30

List: популярные реализации

ArrayList – самая популярная реализация. Внутри – массив.
Сложности операций –

List: популярные реализации ArrayList – самая популярная реализация. Внутри – массив. Сложности
такие, как у массива
Автоматически расширяется при достижение предела размера внутреннего массива
Используется в 99% случаев

Слайд 31

List: популярные реализации

LinkedList – связный список
Сложности алгоритмов как у связного списка
Имеет смысл

List: популярные реализации LinkedList – связный список Сложности алгоритмов как у связного
использовать, только когда нужно много добавлять в середину
Очень популярный вопрос на собеседовании – разница между ArrayList и LinkedList

Слайд 32

Queue (куеуе) - очередь

Очередь
Сохраняет принцип – первый пришел первый ушел
Популярная реализация -

Queue (куеуе) - очередь Очередь Сохраняет принцип – первый пришел первый ушел Популярная реализация - PriorityQueue
PriorityQueue

Слайд 34

Фильтрация элементов коллекции: безопасные способы

removeIf
Создать новую коллекцию, и положить туда нужные элементы
Фичи

Фильтрация элементов коллекции: безопасные способы removeIf Создать новую коллекцию, и положить туда
java 8 + (пока мы про них не знаем)
Итератором
Нельзя – в forEach! (ConcurrentModificationException)

Слайд 35

Вопросы и ответы

Вопросы и ответы

Слайд 36

Глава 5.2.1
Utility - классы

Глава 5.2.1 Utility - классы

Слайд 37

Utility класс

Элемент «процедурного программирования»
По сути – набор процедур
Использовать надо с осторожностью
Закрыт final

Utility класс Элемент «процедурного программирования» По сути – набор процедур Использовать надо
наследования модификатором final
Нельзя создать сущность (для этого делаем приватный конструктор)

Слайд 38

Utility класс

final class – закрыт он наследования

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

Utility класс final class – закрыт он наследования Приватный конструктор по умолчанию не даст создать инстанс
создать инстанс

Слайд 39

Вопросы и ответы

Вопросы и ответы

Слайд 40

Глава 5.3
Практика. Бенчмарк реализаций интерфейса Collection

Глава 5.3 Практика. Бенчмарк реализаций интерфейса Collection