Java Developer – Telegram
Java Developer
15.8K subscribers
1.85K photos
135 videos
2 files
2.06K links
Авторский канал действующего разработчика — интересные заметки, новые технологии, библиотеки и фреймворки

Сотрудничество: @bape_ads
Прайс: @bape_media

РКН: https://clck.ru/3GHfTK

Реклама на бирже: https://telega.in/c/java_tg
Download Telegram
👩‍💻 HashMap в Java (Часть 1)

Давненько не было подробных разборов на канале, поэтому держите — «HashMap в Java»: что это такое и с чем его едят?

HashMap — это структура данных, основанная на хэш-таблицах, реализующая интерфейс Map и позволяющая хранить пары «ключ-значение»

Ключ — это уникальный идентификатор, а значение — объект, связанный с этим ключом.


Допустим, перед нами стоит задача создать список, где будут храниться ФИО человека и номер его паспорта:

Создадим новую «мапу», в которой элементы будут храниться в формате «число-строка». Число будет выступать ключом (тип Integer), а строка — значением (тип String).
HashMap<Integer, String> passportsAndNames = new HashMap<>();


Почему для решения этой задачи отлично подходит HashMap?

Во-первых, ключ в HashMap всегда является уникальным, а это значит, что номер паспорта не будет иметь повторов. ФИО у разных людей могут повторяться и страшного в этом ничего нет, поэтому строка с ФИО — это значение.

Добавим несколько новых пар в HashMap:
passportsAndNames.put(111222, "Иванов Иван Иванович");
passportsAndNames.put(123123, "Сергеев Сергей Сергеевич");

System.out.println(passportsAndNames);


Вывод будет выглядеть так:
// {111222=Иванов Иван Иванович, 123123=Сергеев Сергей Сергеевич}


Во второй части поговорим об особенностях HashMap и полезных методах, которые очень часто используется при работе с этой структурой данных.

🕺 — если было полезно

➡️ Java Developer | #обучение
Please open Telegram to view this post
VIEW IN TELEGRAM
12353
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣47😁731👍1
👩‍💻 HashMap в Java (Часть 2)

Как проверить, что ключи уникальны? Добавим новый элемент в «мапу» с уже имеющимся ключом:
passportsAndNames.put(111222, "Иванов Иван Иванович");
passportsAndNames.put(123123, "Сергеев Сергей Сергеевич");
passportsAndNames.put(111222, "Михалков Михаил Михайлович");

System.out.println(passportsAndNames);


В этом случае предыдущий элемент будет перезаписан:
// {123123=Сергеев Сергей Сергеевич, 111222=Михалков Михаил Михайлович}


Ключ нельзя получить по значению, ведь значения могут повторяться. Поэтому доступ к значениям в HashMap осуществляется по ключу:
String person = passportsAndNames.get(123123);
System.out.println(person);

passportsAndNames.remove(123123);
System.out.println(passportsAndNames);


С помощью метода get() и remove() мы можем получать и удалять элементы из «мапы». Обратите внимание, что получение/удаление пары происходит именно по ключу.

Как проверить, содержит ли HashMap ключ/значение? Для этого существуют методы containsKey() и containsValue():
System.out.println(passportsAndNames.containsKey(111222));
System.out.println(passportsAndNames.containsValue("Михайлов Тимур Иванович"));


containsKey() проверяет наличие по ключу, а containsValue() — по значению. В результате получим:
// Вывод: true false


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

🕺 — и я выпускаю 3 часть

➡️ Java Developer | #обучение
Please open Telegram to view this post
VIEW IN TELEGRAM
1003
Вопрос с собеседования

Что такое ковариантность типов?

Ответ: Ковариантность типов — это свойство некоторых языков, которое позволяет использовать производный тип вместо базового типа в контексте, где ожидается базовый тип. Другими словами, ковариантность позволяет использовать объекты производных классов там, где требуется объект базового класса.

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


➡️ Java Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
315
👩‍💻 Spring и Hibernate простыми словами: обзор для новичков

Spring и Hibernate — два популярных инструмента для Java, которые используются в разработке приложений.

В данной статье мы исследуем их основные функции и особенности, как они работают вместе и почему так высоко ценятся в IT-индустрии.

Ссылка на статью — КЛИК

➡️ Java Developer | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
99💯1
5
Что выведет код сверху?
Anonymous Quiz
23%
0
58%
100
6%
200
12%
Ошибка компиляции
1
👩‍💻 HashMap в Java (Часть 3)

Если вы ещё не читали 1 и 2 часть, то вот они:
Часть №1
Часть №2

Сегодня мы пойдем дальше и первым делом узнаем, как получить ключи и значения по отдельности:
passportsAndNames.put(111222, "Иванов Иван Иванович");
passportsAndNames.put(123123, "Сергеев Сергей Сергеевич");

Set<Integer> keys = passportsAndNames.keySet();
System.out.println("Ключи: " + keys);

ArrayList<String> values = new ArrayList<>(passportsAndNames.values());
System.out.println("Значения: " + values);


Ключи извлекаются в коллекцию Set, а значения — в ArrayList. Стоит знать ещё и то, что в Set не может быть повторяющихся элементов.

Ключи: [111222, 123123] 
Значения: [Иванов Иван Иванович, Сергеев Сергей Сергеевич]


🔵Метод size() — возвращает число элементов в словаре на текущий момент:
System.out.println(passportsAndNames.size());
// Output: 2


🔵Метод isEmpty() — проверяет, есть ли в HashMap хотя бы один элемент:
if (!passportsAndNames.isEmpty()) {
System.out.println(passportsAndNames);
}
// Output: {111222=Иванов Иван Иванович, 123123=Сергеев Сергей Сергеевич}


🔵Метод clear() — удаляет все элементы:
passportsAndNames.clear();
System.out.println(passportsAndNames);
// Output: {}


🔵Кроме того, если вы не знали, две «мапы» можно объединить в одну. Для этого существует метод putAll():
HashMap<Integer, String> passportsAndNames = new HashMap<>();
HashMap<Integer, String> passportsAndNames2 = new HashMap<>();

passportsAndNames.put(111222, "Иванов Иван Иванович");
passportsAndNames.put(123123, "Сергеев Сергей Сергеевич");

passportsAndNames2.put(333333, "Максимов Максим Максимович");
passportsAndNames2.put(555555, "Андреев Андрей Андреевич");

passportsAndNames.putAll(passportsAndNames2);
System.out.println(passportsAndNames);

// {111222=Иванов Иван Иванович, 123123=Сергеев Сергей Сергеевич, 333333=Максимов Максим Максимович, 555555=Андреев Андрей Андреевич}


100 🕺 и я разбираю другую тему

➡️ Java Developer | #обучение
Please open Telegram to view this post
VIEW IN TELEGRAM
1551
Вопрос с собеседования

Можно ли считать Final переменную константой?

Ответ: Поскольку у нас не получится присвоить новое значение для final переменной, кажется, что это переменные константы. Но это только на первый взгляд.

Если тип данных, на который ссылается переменная — immutable, то да, это константа.

А если тип данных mutable, то есть изменяемый, при помощи методов и переменных можно будет изменить значение объекта, на который ссылается final переменная, и в таком случае назвать ее константой нельзя.

Так вот, на примере видно, что часть финальных переменных действительно константы, а часть — нет, и их можно изменить.


➡️ Java Developer | #собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
3910
👩‍💻 5 основных фреймворков для Java-разработчиков

Размышляете над тем, какой фреймворк освоить, чтобы стать полноценным специалистом?

В нашем распоряжении десятки фреймворков, но не обязательно знакомиться со всеми. Какие-то вы начнете изучать по мере необходимости, но есть ряд фреймворков, подлежащих освоению в первую очередь, например Spring и Hibernate.

Ссылка на статью — КЛИК

➡️ Java Developer | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
10🤣53💯2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5211🤣94
👩‍💻 Генерация уникального идентификатора

Данный код позволяет сгенерировать случайный уникальный идентификатор с помощью класса java.util.UUID.

Для удаления знака тире "-" из уникального идентификатора воспользуемся методом replace():
String uuidString = uuid.toString().replace("-", "");
System.out.println("UUID: " + uuidString);

// b80ecc19ac5a4e299a7ffb4a6a4a0264


❤️если было полезно

➡️ Java Developer | #обучение
Please open Telegram to view this post
VIEW IN TELEGRAM
668💯2
🤣3412
Под какой буквой правильный ответ?
Anonymous Quiz
5%
A
2%
B
89%
C
3%
D
🤣4123😁6👍2
👩‍💻 Liquibase + Spring Boot: настройка и написание миграций баз данных

Благодаря этой статье вы узнаете, как подключить и настроить Liquibase в Spring Boot приложении, сгенерировать скрипты инициализации и миграции схемы БД, а также дополнить уже существующие changelog файлы новыми скриптами миграции.

Ссылка на статью КЛИК

➡️ Java Developer | #статья #spring
Please open Telegram to view this post
VIEW IN TELEGRAM
127💯4👍1
Вопрос с собеседования

Что такое JAXP?

Ответ: JAXP, The Java API for XML Processing (Java API для обработки XML) — набор API, упрощающих обработку XML данных в программах написанных на Java. Содержит реализации DOM, SAX и StAX парсеров, поддерживает XSLT и возможность работать с DTD.

➡️ Java Developer | #собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
126💯2
Please open Telegram to view this post
VIEW IN TELEGRAM
72😁35💯8👍2
👩‍💻 Принципы SOLID (Часть 1)

Что такое SOLID?

🟣 S: Single Responsibility Principle (Принцип единственной ответственности).

🟣 O: Open-Closed Principle (Принцип открытости-закрытости).

🟣 L: Liskov Substitution Principle (Принцип подстановки Барбары Лисков).

🟣 I: Interface Segregation Principle (Принцип разделения интерфейса).

🟣 D: Dependency Inversion Principle (Принцип инверсии зависимостей).

1. Принцип единственной ответственности

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

Рассмотрим код:
class Animal {
constructor(name: string){ }
getAnimalName() { }
saveAnimal(a: Animal) { }
}


Класс Animal описывает какое-то животное и нарушает принцип единственной ответственности:
В соответствии с принципом класс должен решать лишь какую-то одну задачу. Он же решает две, занимаясь работой с хранилищем данных в методе saveAnimal и манипулируя свойствами объекта в конструкторе и в методе getAnimalName.


Как такая структура класса может привести к проблемам?

Если изменится порядок работы с хранилищем данных, то придётся вносить изменения во все классы, работающие с хранилищем. Такая архитектура не отличается гибкостью, изменения одних подсистем затрагивают другие, что напоминает эффект домино.

Приведём в порядок и создадим ещё один класс, единственной задачей которого является работа с хранилищем, в частности — сохранение в нём объектов класса Animal:
class Animal {
constructor(name: string){ }
getAnimalName() { }
}
class AnimalDB {
getAnimal(a: Animal) { }
saveAnimal(a: Animal) { }
}


В следующих частях мы рассмотрим остальные принципы SOLID, а пока что оставьте свои реакции:

❤️ — если было полезно
🕺если уже знаком с SOLID

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


➡️ Java Developer | #полезное #solid
Please open Telegram to view this post
VIEW IN TELEGRAM
12145🔥2
Вопрос с собеседования

Для чего используется аннотация @Bean?

Ответ: В классах конфигурации Spring, @Bean используется для определения компонентов с кастомной логикой.

➡️ Java Developer | #собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
2110
👩‍💻 Деплой Java приложения на удаленный сервер

К вашему вниманию любимая рубрика «инструкция для чайников — как самостоятельно сделать свой первый деплой».

Ссылка на статью

➡️ Java Developer | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
195💯1
👩‍💻 Создатель Java вышел на пенсию

Джеймс Гослинг, создатель Java, вышел на пенсию и поделился этой новостью в LinkedIn:

Наконец-то я вышел на пенсию. После многих лет работы инженером-программистом настало время просто наслаждаться жизнью. Последние 7 лет в Amazon были замечательными, несмотря на COVID-19 и индустриальные потрясения. У меня длинный список сторонних проектов, которые теперь могу завершить. Это будет весело.


❤️ — если заслуживает уважения

➡️ Java Developer | #новости
Please open Telegram to view this post
VIEW IN TELEGRAM
2252