Курс “Java Backend
Разработчик”
Урок 2
Java. Методы
В Java блоки кода можно выносить в отдельные методы для дальнейшего
переиспользования и улучшения читабельности кода.
Метод в Java — это именованная часть программы, представляющая собой
блок кода, который выполняет определенное действие.
Синтаксис:
[модификатор_доступа] [другие_модификаторы] возвращаемый_тип имяМетода([параметры]) {
// Тело метода: инструкции, которые выполняет метод
}
Java. Примеры методов
public int sum(int a, int b) {
return a + b;
}
public void printGreeting(String name) {
System.out.println(“Hello, “ + name + “ !”);
}
public static double calculatePercentage(double total, double percent) {
return (total * percent) / 100;
}
Java. Перегрузка методов (Method overloading)
Перегрузка методов - использование методов с одним и тем же именем, но
с разными типами и/или количеством параметров.
public int sum(int x, int y) {
return x + y;
}
public double sum(double x, double y) {
return x + y;
}
Java. Рекурсия
Рекурсия — это когда метод вызывает сам себя для решения подзадачи. Это
позволяет разбирать сложные проблемы на более простые и понятные
части.
Каждый рекурсивный метод должен иметь:
● Базовый случай – условие, при котором рекурсия останавливается.
● Рекурсивный вызов – метод вызывает сам себя с уменьшенной задачей.
Java. Рекурсия (пример)
public static int factorial(int n) {
if (n == 1) return 1; // Базовый случай
return n * factorial(n - 1); // Рекурсивный вызов
}
public static int fibonacci(int n) {
if (n <= 1) return n; // Базовый случай
return fibonacci(n - 1) + fibonacci(n - 2); // Рекурсивный вызов
}
Java. Когда использовать рекурсию?
Когда использовать рекурсию?
✅ Удобно для разделения задачи на подзадачи (деревья, графы).
✅ Используется в функциональном программировании (пример: Stream API).
✅ Полезна при поиске в глубину (DFS) и разборе данных (JSON, XML).
Java. Недостатки рекурсии
❌ Может привести к переполнению стека (StackOverflowError), если глубина
вызовов слишком большая.
❌ Часто менее эффективна, чем итеративные решения (из-за накладных
расходов вызова функций).
Если задача допускает итеративное решение, обычно оно будет быстрее и
менее затратным по памяти.
Java. Цикл
Цикл - это конструкция, позволяющая многократно выполнять определенный
блок кода, пока выполняется определенное условие.
3 вида циклов в Java: for, while, do while.
Java. Цикл for
Используется когда известно количество итераций.
Синтаксис:
for (инициализация; условие; обновление) {
// код для выполнения
}
Пример:
for (int i = 0; i <= 10; i++) {
System.out.println(“Итерация: ” + i);
}
Java. Цикл while
Используется когда количество итераций неизвестно, но известно условия, определяющее продолжение
цикла.
Синтаксис:
while(условие) {
// код для выполнения
Пример:
int = 0;
while (i < 5) {
System.out.println(“Итерация: ” + i);
i++;
}
Java. Цикл do-while
Схож с циклом while, но отличается тем что условие здесь проверяется в конце, т.е. сначала выполняется блок кода, а потом
выполняется условие.
Синтаксис:
do {
// код для выполнения
} while (условие);
Пример:
int x = 13;
do {
x--;
System.out.println(x);
} while (x > 10);
Java. Массивы
Массив — структура данных фиксированного размера, хранящая элементы
одного типа.
Массивы
Одномерные Многомерные
Массив, элементы которого
Список элементов одного также являются массивами.
типа,расположенных в Самые распространенные
линейной это двумерные массивы
последовательности. (матрицы).
Пример: Пример:
int[] values = {1, 2, 3, 4, 5}; int[][] predefined = { {1, 2, 3},
{4, 5, 6}, {7, 8, 9} };
Java. Массивы
Работать с элементами массива можно как с обычными переменными.
Можно их выводить, устанавливать новые значение и т.д.
Распространенные методы:
● length - возвращает количество элементов в массиве.
● Arrays.copyOf - копирует один массив в другой
● Arrays.sort - сортировка массива
Java. Коллекции
Стандартные массивы имеют небольшой функционал по работе с
элементами. Они имеют фиксированный размер, и если попытаться
добавить еще один элемент в уже полностью заполненный массив, то будет
ошибка. Это достаточно неудобно и на помощь в Java приходят коллекции.
Коллекция — это структура данных, предназначенная для хранения группы
объектов. Коллекции позволяют организовывать, хранить и обрабатывать
элементы (данные) различными способами, предоставляя разработчику
гибкие инструменты для работы с данными.
Java. Особенности коллекции
1) Динамический размер: В отличие от массивов, коллекции
автоматически изменяют свой размер при добавлении или удалении
элементов.
2) Универсальность: Коллекции могут хранить объекты различных типов
(с помощью обобщений — generics).
3) Гибкость: Предоставляют множество методов для управления данными:
добавление, удаление, сортировка, поиск и т. д.
Java. Iterable
Iterable – это базовый интерфейс для всех коллекций в Java. Он
предоставляет метод iterator(), который возвращает объект типа Iterator,
необходимый для перебора элементов коллекции.
Интерфейс Iterator предоставляет три ключевых метода для
работы с элементами:
1) E next() – возвращает следующий элемент коллекции.
2) boolean hasNext() – возвращает true, если в коллекции есть
следующий элемент.
3) void remove() – удаляет текущий элемент коллекции.
Java. Iterable (пример)
Интерфейс Collection<T>
Интерфейс Collection расширяет Iterable и является основой для всех типов
коллекций в Java. Он предоставляет универсальные методы для добавления,
удаления, поиска элементов и получения размера коллекции и т.д.
Java. Интерфейс List
Интерфейс List расширяет Collection и представляет упорядоченную
коллекцию, которая может содержать дубликаты элементов. В дополнение к
методам из интерфейса Collection, List предоставляет дополнительные
методы для работы с индексированными элементами.
Java. Интерфейс List (пример)
Java. Интерфейс List
Основные методы:
● void add(int index, object obj) – Вставляет элемент obj на позицию index. Элементы,
начиная с этой позиции, сдвигаются вправо.
● boolean addAll(int index, Collection coll) – Вставляет все элементы коллекции coll в список,
начиная с позиции index.
● object get(int index) – Возвращает элемент, находящийся на указанной позиции.
● int indexOf(Object obj) – Возвращает индекс первого вхождения указанного элемента или -
1, если элемент не найден.
● int lastindexOf(object obj) – Возвращает индекс последнего вхождения указанного элемента
или -1, если элемент не найден.
● Object set(int index, object obj) – Заменяет элемент на указанной позиции на указанный
элемент.
● List subList(int from, int to) – Возвращает часть списка от позиции from включительно до
позиции to исключительно.
● boolean remove(Object o) - Удаление элемента из списка. Возвращает true если элемент
успешно удален, false иначе.
Java. Интерфейс List
Коллекции, реализующие List:
1) ArrayList
2) LinkedList
3) Vector
4) Stack (наследует Vector)
Java. Интерфейс Set
Интерфейс Set расширяет интерфейс Collection и предоставляет набор
методов для работы с неупорядоченными коллекциями. Каждый элемент в
множестве уникален. Уникальность элементов проверяется с
использованием метода equals().
Java. Интерфейс Set
Основные методы:
● add(Object o) – Добавляет элемент в множество, если его там ещё нет. Если
элемент уже присутствует, множество остаётся неизменным, и метод возвращает
false.
● addAll(Collection c) – Добавляет все элементы коллекции в множество, если они
отсутствуют.
● clear() – Удаляет все элементы из множества.
● contains(Object o) – Проверяет наличие элемента в множестве. Возвращает true,
если элемент найден.
● containsAll(Collection c) – Проверяет, содержатся ли все элементы переданной
коллекции в множестве. Возвращает true, если все элементы присутствуют.
● isEmpty() – Возвращает true, если множество не содержит элементов.
● remove(Object o) – Удаляет указанный элемент из множества, если он
присутствует.
● size() – Возвращает количество элементов в множестве.
Java. Интерфейс Set
Коллекции, реализующие Set:
1) HashSet
2) LinkedHashSet
3) SortedSet
4) TreeSet
Java. Интерфейс Queue
Интерфейс Queue предоставляет функциональность очереди — структуры
данных, работающей по принципу “первый пришел, первый обслужен” (FIFO)
Он расширяет интерфейс Collection и предоставляет методы для
управления элементами в порядке их поступления.
Java. Интерфейс Queue (Пример)
Java. Интерфейс Queue
Основные методы:
● boolean offer(E obj) — Вставляет указанный элемент в очередь, если это
возможно сделать немедленно, не нарушая ограничений. Если элемент не может
быть добавлен, возвращает false, в отличие от метода add(), который в такой
ситуации генерирует исключение.
● E peek() — Возвращает, но не удаляет головной элемент очереди, или возвращает
null, если очередь пуста.
● E poll() — Удаляет и возвращает головной элемент очереди, или возвращает null,
если очередь пуста.
● E remove() — Удаляет и возвращает головной элемент очереди. Если очередь
пуста, генерирует исключение NoSuchElementException.
Java. Интерфейс Queue
Коллекции, реализующие Queue:
1) LinkedList
2) PriorityQueue
3) ArrayDeque
Java. Интерфейс Deque
Интерфейс Deque (Double Ended Queue) расширяет Queue и представляет
двустороннюю очередь, где элементы могут быть добавлены и удалены как с
начала, так и с конца.
Java. Интерфейс Deque (пример)
Java. Интерфейс Deque
Основные методы (добавление элементов):
● void addFirst(E obj) — Вставляет элемент в начало очереди.
● void addLast(E obj) — Вставляет элемент в конец очереди.
● boolean offerFirst(E obj) — Добавляет элемент в начало, возвращая true, если
элемент успешно добавлен, или false, если добавление не удалось.
● boolean offerLast(E obj) — Добавляет элемент в конец, возвращая true, если
элемент добавлен, или false, если добавление не удалось.
Java. Интерфейс Deque
Основные методы (получения элементов):
● E getFirst() — возвращает первый элемент, не удаляя его. Если очередь пуста,
генерирует исключение NoSuchElementException.
● E getLast() — возвращает последний элемент, не удаляя его. Если очередь пуста,
генерирует исключение NoSuchElementException.
● E peekFirst() — возвращает первый элемент, не удаляя его. Если очередь пуста,
возвращает null.
● E peekLast() — возвращает последний элемент, не удаляя его. Если очередь
пуста, возвращает null.
Java. Интерфейс Deque
Основные методы (удаление элементов):
● E pollFirst() — Удаляет и возвращает первый элемент. Если очередь пуста,
возвращает null.
● E pollLast() — Удаляет и возвращает последний элемент. Если очередь пуста,
возвращает null.
● E pop() — Удаляет и возвращает первый элемент. Если очередь пуста, генерирует
исключение NoSuchElementException.
● E removeFirst() — Удаляет и возвращает первый элемент. Если очередь пуста,
генерирует исключение NoSuchElementException.
● E removeLast() — Удаляет и возвращает последний элемент. Если очередь пуста,
генерирует исключение NoSuchElementException.
● boolean removeFirstOccurrence(Object obj) — Удаляет первый встреченный
элемент, равный obj. Возвращает true, если элемент был удалён.
● boolean removeLastOccurrence(Object obj) — Удаляет последний встреченный
элемент, равный obj. Возвращает true, если элемент был удалён.
Java. Интерфейс Map
Интерфейс Map - представляет коллекцию пар “ключ-значение”, где каждому ключу
сопоставлено одно значение. Map отличается от других интерфейсов коллекций тем,
что не является потомком интерфейса Collection. Однако, он остается частью Java
Collection Framework и предоставляет мощные инструменты для работы с
ассоциативными массивами.
Java. Интерфейс Map
Основные методы:
● boolean containsKey(Object k) - Возвращает true, если коллекция содержит
указанный ключ k.
● boolean containsValue(Object v) – Возвращает true, если коллекция содержит
указанное значение v.
● Set<Map.Entry<K, V>> entrySet() – Возвращает набор элементов коллекции.
Каждый элемент представляет собой объект Map.Entry, содержащий пару “ключ-
значение”.
● V get(Object k) – Возвращает значение, связанное с ключом k. Если такого ключа
нет, возвращает null.
● V put(K k, V v) – Добавляет в коллекцию новую пару “ключ-значение” или заменяет
значение для уже существующего ключа. Возвращает предыдущее значение для
ключа, если оно было, иначе возвращает null
● V putIfAbsent(K k, V v) – Добавляет пару “ключ-значение” только если такого ключа
ещё нет в карте.
Java. Интерфейс Map
Основные методы:
● Set<K> keySet() – Возвращает набор всех ключей коллекции.
● Collection<V> values() – Возвращает список всех значений коллекции.
● void putAll(Map<? extends K, ? extends V> map) – Добавляет в коллекцию все
элементы из коллекции map.
● V remove(Object k) – Удаляет пару с указанным ключом k.
● int size() – Возвращает количество пар в коллекции.
Java. Интерфейс Map
Коллекции, реализующие Map:
1) HashMap
2) LinkedHashMap
3) TreeMap
4) Hashtable
Домашнее задание