Как устроен под капотом LinkedHashMap?
LinkedHashMap — это реализация интерфейса Map, которая сохраняет порядок добавления элементов. В отличие от обычного HashMap, где элементы могут быть расположены случайным образом, LinkedHashMap поддерживает последовательность вставки или порядок доступа. Это достигается благодаря использованию двусвязного списка, который связывает все элементы карты.
🔹 Структура LinkedHashMap
Основой LinkedHashMap является та же хэш-таблица, что и в HashMap, но с дополнительной структурой двусвязного списка для сохранения порядка элементов:
▪️ Каждая запись (entry) в LinkedHashMap содержит ссылки на предыдущий и следующий элементы. Это позволяет поддерживать порядок добавления или порядок последнего доступа.
▪️ Сначала выполняется хэширование ключей для быстрой вставки и поиска, как в HashMap, а уже потом запись связывается в список.
🔹 Производительность
▪️ Вставка: Добавление новых элементов выполняется за O(1), поскольку элементы добавляются в конец двусвязного списка, а хэш-таблица используется для поиска свободной позиции.
▪️ Удаление: Удаление элемента требует корректировки ссылок в двусвязном списке, что увеличивает накладные расходы, но также выполняется за O(1).
▪️ Поиск: Операция поиска по ключу происходит с использованием хэш-таблицы и выполняется за O(1), как и в HashMap.
▪️ Множественные коллизии: в худшем случае все операции будут выполняться с O(n), если допустить множественные коллизии.
🔹 Использование памяти
Каждая запись LinkedHashMap содержит дополнительные ссылки на предыдущий и следующий элементы, что увеличивает потребление памяти по сравнению с HashMap. Однако это оправдано, если важен порядок элементов.
🔹 Преимущества и недостатки
▪️ Преимущества:
- Сохранение порядка вставки: LinkedHashMap гарантирует, что элементы будут извлекаться в том порядке, в котором они были добавлены.
- Порядок доступа: Можно настроить LinkedHashMap на удаление самых старых элементов, что полезно для кэшей, где используется политика LRU (Least Recently Used).
- Предсказуемость итераций: В отличие от HashMap, где порядок элементов может изменяться, LinkedHashMap всегда сохраняет стабильный порядок.
▪️ Недостатки:
- Более высокое потребление памяти: Дополнительные ссылки на предыдущие и следующие элементы увеличивают память на каждую запись.
- Скорость: LinkedHashMap немного медленнее HashMap из-за поддержания порядка элементов.
@javalib #java
LinkedHashMap — это реализация интерфейса Map, которая сохраняет порядок добавления элементов. В отличие от обычного HashMap, где элементы могут быть расположены случайным образом, LinkedHashMap поддерживает последовательность вставки или порядок доступа. Это достигается благодаря использованию двусвязного списка, который связывает все элементы карты.
🔹 Структура LinkedHashMap
Основой LinkedHashMap является та же хэш-таблица, что и в HashMap, но с дополнительной структурой двусвязного списка для сохранения порядка элементов:
▪️ Каждая запись (entry) в LinkedHashMap содержит ссылки на предыдущий и следующий элементы. Это позволяет поддерживать порядок добавления или порядок последнего доступа.
▪️ Сначала выполняется хэширование ключей для быстрой вставки и поиска, как в HashMap, а уже потом запись связывается в список.
🔹 Производительность
▪️ Вставка: Добавление новых элементов выполняется за O(1), поскольку элементы добавляются в конец двусвязного списка, а хэш-таблица используется для поиска свободной позиции.
▪️ Удаление: Удаление элемента требует корректировки ссылок в двусвязном списке, что увеличивает накладные расходы, но также выполняется за O(1).
▪️ Поиск: Операция поиска по ключу происходит с использованием хэш-таблицы и выполняется за O(1), как и в HashMap.
▪️ Множественные коллизии: в худшем случае все операции будут выполняться с O(n), если допустить множественные коллизии.
🔹 Использование памяти
Каждая запись LinkedHashMap содержит дополнительные ссылки на предыдущий и следующий элементы, что увеличивает потребление памяти по сравнению с HashMap. Однако это оправдано, если важен порядок элементов.
🔹 Преимущества и недостатки
▪️ Преимущества:
- Сохранение порядка вставки: LinkedHashMap гарантирует, что элементы будут извлекаться в том порядке, в котором они были добавлены.
- Порядок доступа: Можно настроить LinkedHashMap на удаление самых старых элементов, что полезно для кэшей, где используется политика LRU (Least Recently Used).
- Предсказуемость итераций: В отличие от HashMap, где порядок элементов может изменяться, LinkedHashMap всегда сохраняет стабильный порядок.
▪️ Недостатки:
- Более высокое потребление памяти: Дополнительные ссылки на предыдущие и следующие элементы увеличивают память на каждую запись.
- Скорость: LinkedHashMap немного медленнее HashMap из-за поддержания порядка элементов.
@javalib #java
5 декабря пройдет онлайн-митап для java-разработчиков от Naumen. Спикеры поделятся опытом в промышленной java-разработке, реальными кейсами и полезными рекомендациями.
В программе три доклада:
🔸 Как приручить JSON — Максим Осипов, руководитель группы разработки Naumen SMP
🔸 Прагматика микросервисов: строим большую систему с помощью пачки монолитов — Дмитрий Черкасов, DevRel Jmix
🔸 Бэкэнд изображений в ОК — Руслан Измайлов, ведущий java-разработчик в ОК, VK
Старт митапа 5 декабря в 16:00 мск | 18:00 екб.
Участие как всегда бесплатное, нужна только регистрация.
→ Зарегистрироваться на митап.
Реклама, АО «Нау-сервис», ИНН 6671116364
https://www.naumen.ru/
erid: 2VtzqxDtiJB
В программе три доклада:
🔸 Как приручить JSON — Максим Осипов, руководитель группы разработки Naumen SMP
🔸 Прагматика микросервисов: строим большую систему с помощью пачки монолитов — Дмитрий Черкасов, DevRel Jmix
🔸 Бэкэнд изображений в ОК — Руслан Измайлов, ведущий java-разработчик в ОК, VK
Старт митапа 5 декабря в 16:00 мск | 18:00 екб.
Участие как всегда бесплатное, нужна только регистрация.
→ Зарегистрироваться на митап.
Реклама, АО «Нау-сервис», ИНН 6671116364
https://www.naumen.ru/
erid: 2VtzqxDtiJB
Java. Самое полное руководство по разработке в примерах от сообщества Stack Overflow (2024) PDF
Эта книга – не академический учебник по Java, а скорее сборник своеобразных рецептов по применению этого универсального языка программирования, которые могут пригодиться в самых разных случаях, связанных с написанием кода. Ее можно использовать для разрешения сложных ситуаций, возникающих у пользователей при работе с Java. Многое из представленного здесь материала ранее не публиковалось в русскоязычных учебниках по языку Java, например, в книге рассмотрены особенности разработки приложений на основе применения параллельного программирования, работа с потоками, а также использование Java при вызове цепочки методов.
Данное издание может стать незаменимым помощником как для начинающего программиста, стремящегося разобраться во всех тонкостях языка Java, так и для более опытных разработчиков, которые смогут использовать книгу в качестве справочника для решения повседневных задач при написании кода.
Эта книга – не академический учебник по Java, а скорее сборник своеобразных рецептов по применению этого универсального языка программирования, которые могут пригодиться в самых разных случаях, связанных с написанием кода. Ее можно использовать для разрешения сложных ситуаций, возникающих у пользователей при работе с Java. Многое из представленного здесь материала ранее не публиковалось в русскоязычных учебниках по языку Java, например, в книге рассмотрены особенности разработки приложений на основе применения параллельного программирования, работа с потоками, а также использование Java при вызове цепочки методов.
Данное издание может стать незаменимым помощником как для начинающего программиста, стремящегося разобраться во всех тонкостях языка Java, так и для более опытных разработчиков, которые смогут использовать книгу в качестве справочника для решения повседневных задач при написании кода.
Событийный подход в разработке процессных приложений с помощью Jmix BPM
Нагромождение проверок после каждого шага процесса делает BPMN диаграмму запутанной и нечитаемой.
Разработчики BPMN учли это и заложили соответствующие возможности в нотацию.
Однако не все аналитики и разработчики умеют ими пользоваться, что является одной из причин, почему диаграммы часто остаются украшением кабинетов, а не автоматизированными процессами.
Хотите перейти от громоздких и запутанных процессов к набору простых, взаимодействующих между собой? Приходите на наш вебинар!
📆 5 декабря, 16:00 (по Москве)
Вы узнаете:
- Как на практике применить событийно-ориентированный подход к автоматизации бизнес-процессов
- Какие инструменты BPMN для этого применяются
- Как организовано межпроцессное взаимодействие
📍Регистрируйтесь на бесплатный онлайн-вебинар по ссылке!
#реклама
О рекламодателе
Нагромождение проверок после каждого шага процесса делает BPMN диаграмму запутанной и нечитаемой.
Разработчики BPMN учли это и заложили соответствующие возможности в нотацию.
Однако не все аналитики и разработчики умеют ими пользоваться, что является одной из причин, почему диаграммы часто остаются украшением кабинетов, а не автоматизированными процессами.
Хотите перейти от громоздких и запутанных процессов к набору простых, взаимодействующих между собой? Приходите на наш вебинар!
📆 5 декабря, 16:00 (по Москве)
Вы узнаете:
- Как на практике применить событийно-ориентированный подход к автоматизации бизнес-процессов
- Какие инструменты BPMN для этого применяются
- Как организовано межпроцессное взаимодействие
📍Регистрируйтесь на бесплатный онлайн-вебинар по ссылке!
#реклама
О рекламодателе
Forwarded from Java Guru 🤓
Что выведет данный код?
Anonymous Quiz
9%
Sum of keys: 5, Concatenated languages: GoKotlinjavaScript
22%
Sum of keys: 30, Concatenated languages: KotlinjavaScript
29%
Sum of keys: 15, Concatenated languages: GoKotlinjavaScript
33%
Sum of keys: 15, Concatenated languages: PythonGoKotlinjavaScript
7%
Sum of keys: 10, Concatenated languages: GoKotlin
🗓 05 декабря в 20:00 МСК
Интеграция логирования с системами обмена сообщениями, такими как Apache Kafka, становится все более востребованной в современных Java-приложениях. Однако найти готовый функционал для этой задачи не всегда просто, поэтому часто возникает необходимость разработки собственного Kafka-appender для логгера.
На вебинаре разберем:
Вебинар пройдет в рамках курса «Java Developer. Professional», все посетители получат welcome-скидку на обучение.
🔗 Ссылка на регистрацию: https://vk.cc/cFpnap
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работает 𝐠𝐑𝐏𝐂
gRPC (Google Remote Procedure Call) — это современный фреймворк с открытым исходным кодом, разработанный компанией Google для эффективной и масштабируемой коммуникации между микросервисами. Он основан на RPC (удалённый вызов процедур) и используется для построения распределённых систем и микросервисных архитектур.
Выше показана диаграмма, иллюстрирующая общий поток данных для 𝐠𝐑𝐏𝐂.
Шаг 1: Клиент отправляет REST-запрос, обычно в формате JSON.
Шаги 2 - 4: Сервис заказа (клиент gRPC) получает REST-запрос, преобразует его и делает RPC-вызов к сервису оплаты. gPRC кодирует клиентский stub в бинарный формат и отправляет на транспортный уровень.
Шаг 5: gRPC передаёт пакеты по сети через HTTP/2. Благодаря бинарному кодированию и сетевым оптимизациям gRPC работает в 5 раз быстрее, чем JSON.
Шаги 6 - 8: Сервис оплаты (сервер gRPC) получает пакеты, декодирует их и вызывает серверное приложение.
Шаги 9 - 11: Результат возвращается с серверного приложения, кодируется и передаётся на транспортный уровень.
Шаги 12 - 14: Сервис заказа получает пакеты, декодирует их и отправляет результат клиентскому приложению.
@javalib #java
gRPC (Google Remote Procedure Call) — это современный фреймворк с открытым исходным кодом, разработанный компанией Google для эффективной и масштабируемой коммуникации между микросервисами. Он основан на RPC (удалённый вызов процедур) и используется для построения распределённых систем и микросервисных архитектур.
Выше показана диаграмма, иллюстрирующая общий поток данных для 𝐠𝐑𝐏𝐂.
Шаг 1: Клиент отправляет REST-запрос, обычно в формате JSON.
Шаги 2 - 4: Сервис заказа (клиент gRPC) получает REST-запрос, преобразует его и делает RPC-вызов к сервису оплаты. gPRC кодирует клиентский stub в бинарный формат и отправляет на транспортный уровень.
Шаг 5: gRPC передаёт пакеты по сети через HTTP/2. Благодаря бинарному кодированию и сетевым оптимизациям gRPC работает в 5 раз быстрее, чем JSON.
Шаги 6 - 8: Сервис оплаты (сервер gRPC) получает пакеты, декодирует их и вызывает серверное приложение.
Шаги 9 - 11: Результат возвращается с серверного приложения, кодируется и передаётся на транспортный уровень.
Шаги 12 - 14: Сервис заказа получает пакеты, декодирует их и отправляет результат клиентскому приложению.
@javalib #java
Онлайн-курс «JAVA-разработчик» от EdMe: 6 месяцев, гарантия работы, оплата после трудоустройства
Образовательный проект EdMe открывает набор на курс по Java-разработке. Программа подойдет для начинающих с нуля и для тех, кто стремится улучшить свои навыки. Обучение построено на менторстве и направлено на комплексную подготовку к трудоустройству. За 6 месяцев вы сможете достичь уровня middle-разработчика, для этого нужно уделять обучению от 20 часов в неделю.
Вы будете взаимодействовать с опытным разработчиком, который объяснит, что нужно учить и как это делать, а также чего избегать, чтобы быстрее освоить необходимые навыки и получить оффер. Ментор будет направлять вас, советовать, как решать технические вопросы, мотивировать и помогать готовиться к собеседованиям.
Плюсы курса:
➕Гарантированное трудоустройство с зарплатой от 140 000 рублей;
➕Оплата курса только после выхода на работу – 20% от зарплаты в течение 18 месяцев;
➕Бесплатная карьерная поддержка после окончания курса;
➕Возможность завершения обучения без оплаты и штрафов, если вы по каким-либо причинам не сможете закончить курс.
Во время обучения вы будете использовать Jira, Confluence, Bitbucket, GitLab – те самые системы, с которыми вы столкнетесь на реальных проектах.
Программа курса:
▪️ Основы Java: Java Core, List, JDBC, Hibernate, Spring (Core, MVC, Security), Spring Boot, Git.
▪️ Проект.
▪️ Подготовка к собеседованиям (составление резюме, прохождение тестовых собеседований).
▪️ Прохождение реальных собеседований.
Посмотреть подробности и записаться можно на EdMe.pro
Отбор включает несложное тестовое задание, которое под силу выполнить человеку без опыта, и собеседование.
Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2VtzqwFLhVq
Образовательный проект EdMe открывает набор на курс по Java-разработке. Программа подойдет для начинающих с нуля и для тех, кто стремится улучшить свои навыки. Обучение построено на менторстве и направлено на комплексную подготовку к трудоустройству. За 6 месяцев вы сможете достичь уровня middle-разработчика, для этого нужно уделять обучению от 20 часов в неделю.
Вы будете взаимодействовать с опытным разработчиком, который объяснит, что нужно учить и как это делать, а также чего избегать, чтобы быстрее освоить необходимые навыки и получить оффер. Ментор будет направлять вас, советовать, как решать технические вопросы, мотивировать и помогать готовиться к собеседованиям.
Плюсы курса:
➕Гарантированное трудоустройство с зарплатой от 140 000 рублей;
➕Оплата курса только после выхода на работу – 20% от зарплаты в течение 18 месяцев;
➕Бесплатная карьерная поддержка после окончания курса;
➕Возможность завершения обучения без оплаты и штрафов, если вы по каким-либо причинам не сможете закончить курс.
Во время обучения вы будете использовать Jira, Confluence, Bitbucket, GitLab – те самые системы, с которыми вы столкнетесь на реальных проектах.
Программа курса:
▪️ Основы Java: Java Core, List, JDBC, Hibernate, Spring (Core, MVC, Security), Spring Boot, Git.
▪️ Проект.
▪️ Подготовка к собеседованиям (составление резюме, прохождение тестовых собеседований).
▪️ Прохождение реальных собеседований.
Посмотреть подробности и записаться можно на EdMe.pro
Отбор включает несложное тестовое задание, которое под силу выполнить человеку без опыта, и собеседование.
Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2VtzqwFLhVq
System.arraycopy
System.arraycopy используется для копирования элементов из одного массива в другой. Этот метод предоставляет эффективный способ копирования данных между массивами. Синтаксис System.arraycopy:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
Параметры метода включают:
src: Исходный массив, из которого вы хотите скопировать элементы.
srcPos: Начальная позиция в исходном массиве, с которой начнется копирование.
dest: Целевой массив, в который вы хотите скопировать элементы.
destPos: Начальная позиция в целевом массиве, куда будут скопированы элементы.
length: Количество элементов, которое вы хотите скопировать.
@javalib #java
System.arraycopy используется для копирования элементов из одного массива в другой. Этот метод предоставляет эффективный способ копирования данных между массивами. Синтаксис System.arraycopy:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
Параметры метода включают:
src: Исходный массив, из которого вы хотите скопировать элементы.
srcPos: Начальная позиция в исходном массиве, с которой начнется копирование.
dest: Целевой массив, в который вы хотите скопировать элементы.
destPos: Начальная позиция в целевом массиве, куда будут скопированы элементы.
length: Количество элементов, которое вы хотите скопировать.
@javalib #java
Обучение на курсе «Разработчик на Spring Framework» — ваш шанс прокачаться и выйти на более серьёзные проекты!
Станьте профессионалом, который уверенно работает с микросервисной архитектурой, быстро доносит идеи до production-grade и владеет Spring на уровне, который ценят в топовых компаниях. Диплом OTUS откроет вам двери к новым возможностям и амбициозным проектам.
🎁 В "Черную пятницу", скидки на курс до 15%! Подробности у менеджеров.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод insert()
Метод insert() используется для вставки элемента в список в заданную позицию. Он принадлежит интерфейсу List и его реализациям, таким как ArrayList.
Этот метод вставляет указанный элемент element по заданному индексу index и сдвигает все последующие элементы вправо.
*Индексы начинаются с 0.
*Если индекс меньше 0 или больше размера списка, будет выброшено исключение.
@javalib #java
Метод insert() используется для вставки элемента в список в заданную позицию. Он принадлежит интерфейсу List и его реализациям, таким как ArrayList.
Этот метод вставляет указанный элемент element по заданному индексу index и сдвигает все последующие элементы вправо.
*Индексы начинаются с 0.
*Если индекс меньше 0 или больше размера списка, будет выброшено исключение.
@javalib #java
Media is too big
VIEW IN TELEGRAM
Разбор исключений в Java (Checked&Unchecked): руководство для начинающих разработчиков
Погружаемся в мир исключений в Java! 🚀 В этом видео вы узнаете, что такое проверяемые (checked) и непроверяемые (unchecked) исключения, чем они отличаются, и как правильно их использовать в коде. Разберёмся с базовым классом Exception, научимся создавать свои исключения и обрабатывать их с помощью @ExceptionHandler.
Этот ролик идеально подходит для начинающих разработчиков, а также для тех, кто хочет систематизировать знания по обработке ошибок в Java.
В видео:
✔️ Что такое исключения и зачем они нужны
✔️ Checked vs Unchecked: основное различие
✔️ Класс Exception и его структура
✔️ Как создать своё исключение
✔️ Реальная обработка ошибок в Spring Boot с @ExceptionHandler
✔️ Полезные советы по работе с исключениями
📺 🗣 СМОТРЕТЬ RUTUBE
🌐 🗣 СМОТРЕТЬ VKVIDEO
@javalib #java
Погружаемся в мир исключений в Java! 🚀 В этом видео вы узнаете, что такое проверяемые (checked) и непроверяемые (unchecked) исключения, чем они отличаются, и как правильно их использовать в коде. Разберёмся с базовым классом Exception, научимся создавать свои исключения и обрабатывать их с помощью @ExceptionHandler.
Этот ролик идеально подходит для начинающих разработчиков, а также для тех, кто хочет систематизировать знания по обработке ошибок в Java.
В видео:
✔️ Что такое исключения и зачем они нужны
✔️ Checked vs Unchecked: основное различие
✔️ Класс Exception и его структура
✔️ Как создать своё исключение
✔️ Реальная обработка ошибок в Spring Boot с @ExceptionHandler
✔️ Полезные советы по работе с исключениями
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring Security в действии (2025) PDF
Spring Security значительно упрощает защиту корпоративных приложений, разработанных на Java. Этот мощный фреймворк идеально интегрируется с приложениями Spring, обеспечивая защиту с первых шагов проекта и предоставляя готовые к использованию функции, которые помогут вам реализовать надежную авторизацию и аутентификацию, а также защитить от кражи данных и вторжений. Как и все остальное в экосистеме Spring, этот фреймворк бесплатен, имеет открытый исходный код и поддерживается замечательной командой VMWare.
Понятные объяснения и наглядные примеры научат вас создавать собственные серверы авторизации, настраивать защищенные конечные точки и предотвращать атаки с использованием межсайтового скриптинга и подделки запросов.
Издание адресовано программистам Java и Spring.
Spring Security значительно упрощает защиту корпоративных приложений, разработанных на Java. Этот мощный фреймворк идеально интегрируется с приложениями Spring, обеспечивая защиту с первых шагов проекта и предоставляя готовые к использованию функции, которые помогут вам реализовать надежную авторизацию и аутентификацию, а также защитить от кражи данных и вторжений. Как и все остальное в экосистеме Spring, этот фреймворк бесплатен, имеет открытый исходный код и поддерживается замечательной командой VMWare.
Понятные объяснения и наглядные примеры научат вас создавать собственные серверы авторизации, настраивать защищенные конечные точки и предотвращать атаки с использованием межсайтового скриптинга и подделки запросов.
Издание адресовано программистам Java и Spring.
Начните карьеру Java-разработчика с прочной базой!
Java — один из ключевых языков программирования, который используют в банковском деле, корпоративных приложениях и IT-гигантах. Курс поможет вам освоить современные инструменты, такие как Spring, Docker, Hibernate и PostgreSQL.
Обучение на примерах реальных задач, опытные наставники и живая практика с кодом. С дипломом от OTUS вы станете заметным кандидатом для работодателей!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Создаём Telegram Бота с Нуля на Java и Spring Boot | Часть 2: Вырезка из процесса разработки
🖖Приветствую! Мы с вами вместе напишем реальный проект Telegram бота. В этой части я даю вам вырезку того, как проходит процесс.
Первая часть
📺 🗣 СМОТРЕТЬ RUTUBE
🌐 🗣 СМОТРЕТЬ VKVIDEO
@javalib #java
🖖Приветствую! Мы с вами вместе напишем реальный проект Telegram бота. В этой части я даю вам вырезку того, как проходит процесс.
Первая часть
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM