Давненько не было подробных разборов на канале, поэтому держите — «HashMap в Java»: что это такое и с чем его едят?
HashMap — это структура данных, основанная на хэш-таблицах, реализующая интерфейс Map и позволяющая хранить пары «ключ-значение»
❕ Ключ — это уникальный идентификатор, а значение — объект, связанный с этим ключом.
Допустим, перед нами стоит задача создать список, где будут храниться ФИО человека и номер его паспорта:
Создадим новую «мапу», в которой элементы будут храниться в формате «число-строка». Число будет выступать ключом (тип Integer), а строка — значением (тип String).
HashMap<Integer, String> passportsAndNames = new HashMap<>();
Во-первых, ключ в HashMap всегда является уникальным, а это значит, что номер паспорта не будет иметь повторов. ФИО у разных людей могут повторяться и страшного в этом ничего нет, поэтому строка с ФИО — это значение.
Добавим несколько новых пар в HashMap:
passportsAndNames.put(111222, "Иванов Иван Иванович");
passportsAndNames.put(123123, "Сергеев Сергей Сергеевич");
System.out.println(passportsAndNames);
Вывод будет выглядеть так:
// {111222=Иванов Иван Иванович, 123123=Сергеев Сергей Сергеевич}Во второй части поговорим об особенностях HashMap и полезных методах, которые очень часто используется при работе с этой структурой данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣47😁7 3❤1👍1
Как проверить, что ключи уникальны? Добавим новый элемент в «мапу» с уже имеющимся ключом:
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, которые будут полезны любому разработчику.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое ковариантность типов?
Ответ:
В Java ковариантность типов используется в отношении наследования и переопределения методов. Когда метод в подклассе имеет возвращаемый тип, который является производным от возвращаемого типа метода в суперклассе, то этот тип считается ковариантным.
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring и Hibernate — два популярных инструмента для Java, которые используются в разработке приложений.
В данной статье мы исследуем их основные функции и особенности, как они работают вместе и почему так высоко ценятся в IT-индустрии.
Ссылка на статью — КЛИК
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9 9💯1
❤1
Если вы ещё не читали 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);
Ключи: [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
Please open Telegram to view this post
VIEW IN TELEGRAM
Можно ли считать Final переменную константой?
Ответ:
Если тип данных, на который ссылается переменная — immutable, то да, это константа.
А если тип данных mutable, то есть изменяемый, при помощи методов и переменных можно будет изменить значение объекта, на который ссылается final переменная, и в таком случае назвать ее константой нельзя.
Так вот, на примере видно, что часть финальных переменных действительно константы, а часть — нет, и их можно изменить.
Please open Telegram to view this post
VIEW IN TELEGRAM
Размышляете над тем, какой фреймворк освоить, чтобы стать полноценным специалистом?
В нашем распоряжении десятки фреймворков, но не обязательно знакомиться со всеми. Какие-то вы начнете изучать по мере необходимости, но есть ряд фреймворков, подлежащих освоению в первую очередь, например Spring и Hibernate.
Ссылка на статью — КЛИК
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁52 11🤣9❤4
Данный код позволяет сгенерировать случайный уникальный идентификатор с помощью класса
java.util.UUID.Для удаления знака тире "-" из уникального идентификатора воспользуемся методом
replace():String uuidString = uuid.toString().replace("-", "");
System.out.println("UUID: " + uuidString);
// b80ecc19ac5a4e299a7ffb4a6a4a0264Please open Telegram to view this post
VIEW IN TELEGRAM
❤66 8💯2
🤣41 23😁6👍2
Благодаря этой статье вы узнаете, как подключить и настроить Liquibase в Spring Boot приложении, сгенерировать скрипты инициализации и миграции схемы БД, а также дополнить уже существующие changelog файлы новыми скриптами миграции.
Ссылка на статью — КЛИК
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12 7💯4👍1
Что такое JAXP?
Ответ:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое SOLID?
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, а пока что оставьте свои реакции:
«Проектируя классы, мы должны стремиться к тому, чтобы объединять родственные компоненты, то есть такие, изменения в которых происходят по одним и тем же причинам. Нам следует стараться разделять компоненты, изменения в которых вызывают различные причины» — Стив Фентон.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤121 45🔥2
Для чего используется аннотация
@Bean?Ответ:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤21 10
К вашему вниманию любимая рубрика «инструкция для чайников — как самостоятельно сделать свой первый деплой».
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19 5💯1
Джеймс Гослинг, создатель Java, вышел на пенсию и поделился этой новостью в LinkedIn:
Наконец-то я вышел на пенсию. После многих лет работы инженером-программистом настало время просто наслаждаться жизнью. Последние 7 лет в Amazon были замечательными, несмотря на COVID-19 и индустриальные потрясения. У меня длинный список сторонних проектов, которые теперь могу завершить. Это будет весело.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤225 2