Статьи
YouTube-канал Отзывы

Статьи с тэгом «Java»

Алгоритм инверсии двусвязного списка

8 мая 2023

Тэги: Java, алгоритмы, головоломки.

Двусвязный список – это структура данных, которая состоит из узлов, каждый из которых имеет ссылки на следующий и предыдущий элементы. Одна из часто используемых операций на двусвязных списках – это инверсия списка, то есть изменение порядка элементов на обратный.

Структура элемента

Класс Node, представляющий собой один элемент списка, выглядит следующим образом:

class Node {
    int value;
    Node next; // всегда null у последнего элемента
    Node prev; // всегда null у первого элемента

    Node(int value) {
        this.value = value;
        this.next = null;
        this.prev = null;
    }
}
Читать полностью...

Контракт интерфейса Comparable

6 мая 2023

Тэги: Collections, Java, руководство, ООП.

В языке программирования Java есть механизм сравнения объектов, который основан на интерфейсе Comparable и методе compareTo(). Этот механизм позволяет определить порядок сортировки объектов и использовать их в коллекциях, которые требуют сравнения элементов.

Контракт метода compareTo()

Интерфейс Comparable определяет единственный метод compareTo(), который сравнивает текущий объект с переданным в аргументе.

Контракт метода compareTo() состоит из трех основных правил:

  1. Если текущий объект меньше объекта, с которым он сравнивается, то метод должен возвращать отрицательное число.
  2. Если текущий объект больше объекта, с которым он сравнивается, то метод должен возвращать положительное число.
  3. Если текущий объект равен объекту, с которым он сравнивается, то метод должен возвращать ноль.
Читать полностью...

Алгоритм записи римских цифр

17 апреля 2023

Тэги: Java, алгоритмы, головоломки.

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

Читать полностью...

Вычисление арифметических выражений на Java

5 марта 2023

Тэги: алгоритмы, Java, руководство, головоломки, maven.

Давайте разберёмся, как можно вычислять арифметические выражения. Предположим, на вход нам поступает строка текста, которая содержит корректное арифметическое выражение.


" 20 * (10 - 5) "

Это выражение состоит из пробелов, чисел, скобок и знаков, обозначающих основные математические действия (плюс, минус, умножить, разделить). Нам нужно разобрать это выражение на отдельные элементы, а затем вычислить результат с учётом приоритетов математических операций. Например, умножение и деление должно выполняться раньше, чем сложение и вычитание. А часть выражения, заключённая в скобки, имеет приоритет над другими частями.

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

  1. Разбиение строки на отдельные части
  2. Обработка этих частей с учётом математических операций
  3. Само вычисление

Разберём каждую из этих частей подробнее.

Читать полностью...

Системы счисления

26 февраля 2023

Тэги: алгоритмы, руководство, Java, головоломки.

Что такое системы счисления

В математике и программировании понятие системы счисления занимает очень важную роль. За столь умным названием кроется довольно простая идея. Система счисления – это способ записи (представления) чисел.

Иными словами, как записать любое сколь угодно большое число, имея в арсенале всего 10 цифр-символов? Правильно, комбинируя эти цифры друг с другом. Причём расположение цифры в записи числа имеет значение, ибо 123 не равно 321. Хотя цифры используются одинаковые.

Десятичная система счисления

В повседневной жизни мы используем десятичную систему счисления, хоть и не задумываемся над этим. Просто так исторически сложилось. Десятичной она называется потому что для записи любого числа используется ровно 10 цифр.

Обратите внимание, что любое число в десятичной записи можно разбить на слагаемые и степени числа 10. Например:

123 = 100 + 20 + 3 = 1*10^2 + 2*10^1 + 3*10^0
// символ ^ означает возведение в степень

Однако помимо десятичной существуют другие системы счисления. И у каждой из них своя область применения.

Читать полностью...

Как отправлять email в Spring Boot (kotlin)

25 февраля 2023

Тэги: Spring, Spring Boot, Kotlin, gradle, YouTube, Java.

В этой статье вы узнаете, как отправлять email в Spring Boot. Также можно посмотреть исходники этого примера на github и видео на YouTube.

Для начала создадим новый gradle-проект. Проще всего это сделать с помощью Spring Initializr. Там выбираем параметры Java 17, язык – Kotlin, сборщик Gradle – Kotlin. В зависимости добавим Spring Web и Java Mail Sender. В итоге в проекте должно быть прописано:

implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-mail")

Стартер spring-boot-starter-mail добавляет саму функциональность работы с email.

Читать полностью...

Алгоритм инвертирования массива на Java

22 февраля 2023

Тэги: Java, алгоритмы, головоломки.

Давайте рассмотрим алгоритм инвертирования массива. На вход нам подаётся массив произвольной длины и нужно поменять порядок следования его элементов на обратный. То есть сделать первый элемент последним, второй – предпоследним и т.д.

Для массива целых чисел реализация алгоритма на Java будет выглядеть так:

public void invertArray(int[] array) {
    for (int i = 0; i < array.length / 2; i++) {
        int temp = array[i];
        array[i] = array[array.length - i - 1];
        array[array.length - i - 1] = temp;
    }
}

Метод invertArray() получает исходный массив в качестве параметра. Затем в цикле проходим по первой половине элементов и на каждой итерации меняем местами элемент с индексом i и элемент с таким же смещением, но с конца массива (array.length – i – 1). Чтобы обменять значения местами мы используем временную переменную.

Читать полностью...

Алгоритм определения анаграмм

21 февраля 2023

Тэги: Java, Collections, головоломки, алгоритмы.

Рассмотрим такую алгоритмическую задачу, как определение анаграмм. Реализацию такого алгоритма у вас могут спросить на собеседовании. Даны две строки и нужно определить, являются ли они анаграммами.

Одно слово является анаграммой другого, если второе слово получается из первого путём перестановки букв. Например, слово «фара» является анаграммой слова «арфа». Также «комар» является анаграммой слова «корма».

При этом если в слове встречается несколько одинаковых букв, то должно совпадать также их количество. Например, «каркас» и «краска» имеют по две буквы «а» и «к».

Читать полностью...

Кеширование в Spring Boot

30 июля 2022

Тэги: Spring Boot, Spring, maven, gradle, Java.

Spring Boot поддерживает простой механизм кеширования данных. Рассмотрим его на примере, исходники которого доступны на github.

Подключение зависимостей

Создадим стандартное приложение Spring Boot. Это удобно делать через Spring Initializr. Если вы используете gradle, то в файле build.gradle должны быть две зависимости:

implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'org.springframework.boot:spring-boot-starter-web'

Если же вы используете maven, то зависимости будут в файле pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Зависимость spring-boot-starter-web – это базовая функциональность нашего веб-приложения, в том числе поддержка rest-контроллеров. Зависимость spring-boot-starter-cache добавляет возможность кеширования.

Читать полностью...

Работа с коллекциями в Kotlin и Java

21 июля 2022

Тэги: Kotlin, Java, Collections, Stream API.

В этой статье хотелось бы сделать шпаргалку для тех, кто только начинает осваивать Kotlin. Этот язык предлагает широкий набор методов для работы с коллекциями. Многие начинают осваивать его, уже имея за плечами опыт на Java, поэтому мне хотелось бы привести также варианты кода и на Java.

Создаём класс-сущность

Для того, чтобы нам было от чего отталкиваться, создадим класс-сущность. Это класс, предназначенный для хранения данных. Часто в приложениях поля таких классов мапятся один к одному на поля таблицы в базе данных. Для примера рассмотрим сущность «Город», у которой есть два атрибута: название и количество проживающих в нём людей.

Читать полностью...

Далее ❯