uk
Feedback
Библиотека Java разработчика

Библиотека Java разработчика

Відкрити в Telegram

📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Показати більше

📈 Аналітичний огляд Telegram-каналу Библиотека Java разработчика

Канал Библиотека Java разработчика (@bookjava) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 10 115 підписників, посідаючи 11 697 місце в категорії Технології та додатки та 62 901 місце у регіоні Росія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 10 115 підписників.

За останніми даними від 27 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -73, а за останні 24 години на -3, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 7.20%. Протягом перших 24 годин після публікації контент зазвичай збирає 3.71% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 729 переглядів. Протягом першої доби публікація в середньому набирає 375 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 7.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як string, интерфейс, строка, boot, api.

📝 Опис та контентна політика

Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Завдяки високій частоті оновлень (останні дані отримано 28 серпня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.

10 115
Підписники
-324 години
-167 днів
-7330 день
Архів дописів
👩‍💻 Разработка на Java требует глубокого понимания не только языка, но и принципов работы JVM, многопоточности и современны
👩‍💻 Разработка на Java требует глубокого понимания не только языка, но и принципов работы JVM, многопоточности и современных фреймворков. 🎯 Курс «Java Developer. Professional» — это структурированное обучение для разработчиков, которые хотят выйти на новый уровень, освоить актуальный стек технологий и уверенно претендовать на позиции уровня Middle+. Вы получите 96 часов практической работы, на живых вебинарах разберете ключевые аспекты работы JVM, научитесь строить эффективные многопоточные приложения, освоите Spring WebFlux, Kafka, реактивный Postgres и Kubernetes. 📚Программа OTUS постоянно обновляется, соответствуя требованиям рынка, а диплом ценится работодателями. ➡️ Пройдите вступительное тестирование и присоединяйтесь к группе: https://vk.cc/cN9CYN Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Kafka Cluster в Docker Настроим docker-compose.yml для кафка кластера и запустим наше приложение с кафкой из докера 00:00 Intro 00:30 Конфигурация одного сервера 10:23 Запуск и проверка работы 15:15 Конфигурация кластера 18:05 Запуск кластера и проверка работы 19:30 environment.env 21:30 environment.env 22:56 Итог источник 👉@BookJava

🧠 Быстрый способ найти performance-проблемы в Spring Boot-приложении Сейчас покажу, как быстро узнать, какие бины подгружают
🧠 Быстрый способ найти performance-проблемы в Spring Boot-приложении Сейчас покажу, как быстро узнать, какие бины подгружаются дольше всего при старте Spring Boot-приложения. 📌 Добавь в application.yml:

spring:
  application:
    name: demo
  main:
    log-startup-info: true
  boot:
    startup:
      logging:
        enabled: true
🔥 Теперь при старте приложения Spring Boot 3+ покажет top-N самых "тяжёлых" бинов:
Startup completed in 3.567 seconds
Application started in 3.789 seconds (JVM running for 4.112)
  Bean instantiation and initialization:
    145 ms -> com.example.HeavyBean
    95 ms  -> com.example.AnotherBean
💡 Это встроенный инструмент, который раньше был только в Spring Boot Actuator! 📈 Отлично помогает: при оптимизации старта, для понимания сложностей DI, при миграции на новые версии. ⚠️ Подходит только для Spring Boot 2.4+ . 👉@BookJava

Открыт набор в Т-Академию Пройдите бесплатное обучение по аналитике или разработке на задачах, похожих на те, с которыми рабо
Открыт набор в Т-Академию Пройдите бесплатное обучение по аналитике или разработке на задачах, похожих на те, с которыми работают специалисты в крупных ИТ-компаниях. В Т-Академии студенты каждую неделю выполняют практические задания и развивают собственный pet-проект. Приглашенные наставники из Т-Банка помогут прокачаться в одном из треков — разработке (backend, frontend, mobile) или в продуктовой аналитике. Подойдет тем, кто уже знает базу, но не понимает, как применить ее на практике. Учеба онлайн, можно совмещать с вузом или работой. Помимо хардов — прокачка софт-скиллов, тренировочные интервью, мастер-классы и встречи в городах, где есть ИТ-хабы Т‑Банка. У лучших будет шанс продолжить карьеру в команде. Подать заявку можно до 31 июля

🔍 Enumeration vs Iterator в Java Java-программисты часто сталкиваются с двумя интерфейсами для перебора коллекций: устаревшим Enumeration и современным Iterator. Разберём ключевые отличия: 1️⃣ Происхождение * Enumeration появился в Java 1.0 и используется в старых классах (Vector, Hashtable). * Iterator введён в Java 1.2 вместе с коллекциями из пакета java.util (List, Set и т.д.). 2️⃣ Методы и возможности * Enumeration предоставляет методы hasMoreElements() для проверки и nextElement() для получения следующего элемента, но не умеет удалять элементы во время итерации. * Iterator использует hasNext() и next(), а также имеет метод remove() для безопасного удаления элементов прямо во время обхода. 3️⃣ Fail-fast поведение * Iterator отслеживает изменения коллекции извне и при обнаружении бросает ConcurrentModificationException. * Enumeration такого механизма не имеет — внешние модификации могут приводить к непредсказуемым результатам. 4️⃣ Поддержка дженериков * Enumeration не типобезопасен (до Java 1.5), что требовало кастов. * Iterator<E> полностью интегрирован с дженериками, что позволяет избежать ClassCastException. 5️⃣ Когда использовать * Iterator — выбор по умолчанию для всех современных коллекций: гибкость, безопасность и поддержка удаления. * Enumeration — только при взаимодействии с legacy-API (Vector, Hashtable и др.). 💡 Вывод: выбирайте Iterator — он более универсален, безопасен и дружелюбен к дженерикам. Enumeration сохранён в языке лишь ради обратной совместимости. 👉@BookJava

Проверка на null с помощью Optional Optional помогает избежать NullPointerExceptions. String name = "Alice"; Optional maybeNa
Проверка на null с помощью Optional Optional помогает избежать NullPointerExceptions.

String name = "Alice";
Optional<String> maybeName = Optional.ofNullable(name);
System.out.println(maybeName.orElse("Nobody"));  // Output: Alice
👉@BookJava

Как контролировать и управлять приложениями на Spring Boot без лишней головной боли? На открытом вебинаре «Spring Boot Actuat
Как контролировать и управлять приложениями на Spring Boot без лишней головной боли? На открытом вебинаре «Spring Boot Actuator: основы мониторинга и управления приложением» 25 июня в 20:00 МСК мы разберём: - Для чего нужен Spring Boot Actuator. - Как настроить и использовать метрики для контроля приложений. - Как избежать проблем с производительностью на ранних этапах разработки. Представьте, что вы с лёгкостью настраиваете мониторинг, отслеживаете метрики и эффективно управляете приложениями без перерывов в работе. Это станет возможным, если освоить Spring Boot Actuator. Открытый урок проходит в преддверии старта курса «Разработчик на Spring Framework» — все участники получат скидку на обучение. Регистрируйтесь прямо сейчас: https://vk.cc/cN4MSC Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🚀 7 самых полезных методов Stream API в Java 21 Работаешь с коллекциями в Java? Тогда Stream API — твой лучший друг. В Java
🚀 7 самых полезных методов Stream API в Java 21 Работаешь с коллекциями в Java? Тогда Stream API — твой лучший друг. В Java 21 он стал ещё удобнее. Вот краткая шпаргалка по самым нужным методам — с понятными примерами 👇 🔹 1. filter(Predicate) 📌 Фильтрует элементы по условию. 🧠 Пример: оставить только чётные числа:

List<Integer> evens = numbers.stream()
                             .filter(n -> n % 2 == 0)
                             .toList();
🔹 2. map(Function) 📌 Преобразует каждый элемент. 🧠 Пример: сделать все имена заглавными:

List<String> upperCaseNames = names.stream()
                                   .map(String::toUpperCase)
                                   .toList();
🔹 3. flatMap(Function) 📌 «Сплющивает» вложенные коллекции. 🧠 Пример: объединить вложенные списки:

List<String> words = nestedLists.stream()
                                .flatMap(List::stream)
                                .toList();
🔹 4. collect(Collector) 📌 Собирает элементы в коллекцию. 🧠 Пример: получить Set из списка:

Set<String> uniqueNames = names.stream()
                               .collect(Collectors.toSet());
🔹 5. forEach(Consumer) 📌 Выполняет действие для каждого элемента. 🧠 Пример: распечатать все имена:

names.stream().forEach(System.out::println);
🔹 6. reduce(BinaryOperator) 📌 Сводит все элементы к одному значению. 🧠 Пример: сумма чисел:

int sum = numbers.stream()
                 .reduce(0, Integer::sum);
🔹 7. takeWhile / dropWhile (Java 9+) 📌 Берёт или пропускает элементы, пока выполняется условие. 🧠 Пример: взять только числа < 10:

List<Integer> lessThanTen = numbers.stream()
                                   .takeWhile(n -> n < 10)
                                   .toList();
💡 Лайфхак: вместо collect(...) используй toList() и toSet() — код станет чище, а производительность выше. 👇 А ты какие методы используешь чаще всего? Поделись в комментах — реальный опыт всегда круче теории! 👉@BookJava

💡 Совет Java ✅ Заменяем и переворачиваем последнее слово в строке — без использования StringBuilder! Когда-нибудь задумывалс
💡 Совет JavaЗаменяем и переворачиваем последнее слово в строке — без использования StringBuilder! Когда-нибудь задумывался, как в Java перевернуть только последнее слово в предложении и вставить его обратно? 🤔 Вот лаконичное решение на чистом Java, без использования StringBuilder. 💡 Отлично подойдёт новичкам, чтобы лучше понять: 1. Логику реверса строки 🔁 2. Работу с массивами и циклами 🧩 3. Почему важно избегать изменяемых классов, вроде StringBuilder, когда тренируешь основы 💪 👉@BookJava

👩‍💻🎯 Юнитесты на Java: как новичку поймать баги за 5 Секунд? Приглашаем на открытый урок. 🗓 25 июня в 20:00 МСК 🆓 Беспла
👩‍💻🎯 Юнитесты на Java: как новичку поймать баги за 5 Секунд? Приглашаем на открытый урок. 🗓 25 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Java-разработчик». 🦾 Тестирование — суперсила разработчика. Научитесь писать код, который проверяет сам себя, экономит часы на отладке и делает ваши приложения неуязвимыми. О чём поговорим: ✔️ Что такое Unit-тесты? Для чего они нужны, даже если «код и так работает». ✔️ JUnit 5 для новичков: как установить и написать первый тест. ✔️ Тестирование = Дзен-кодинг: как тесты помогают понять свой код лучше вас самих. ✔️ Ловушки и лайфхаки: что делать, если тесты падают? Кому будет интересно: Начинающим Java-разработчикам, студентам и всем, кто хочет перестать бояться слов «тестирование» и «баги». В результате вебинара вы: Создадите свой первый тест на Java, поймёте, как тестировать методы с исключениями, и начнёте писать код, которым можно гордиться. 🔗 Ссылка на регистрацию: https://vk.cc/cN4MxX Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Создание REST API с использованием Spring WebFlux и Security 00:00:00 Введение 00:00:20 Создание проекта 00:11:36 Создание миграций БД 00:15:40 Создание базовых классов 00:23:20 Реализация логики генерации JWT токена 00:46:30 Реализация логики валидации JWT токена 00:53:05 Построения цепочки аутентификации 01:04:22 Финальная конфигурация с использованием SecurityWebFilterChain 01:12:11 Реализация REST контроллеров 01:23:15 Проверка REST API средствами Postman 01:24:21 Добавление и конфигурация обработчика ошибок 01:25:40 Заключение Ссылка на Github репозиторий https://github.com/proselytear/webfluxsecurity источник 👉@BookJava

🧠 Spring Boot + MapStruct: как избежать null при обновлении сущности При обновлении сущностей через MapStruct бывает типична
🧠 Spring Boot + MapStruct: как избежать null при обновлении сущности При обновлении сущностей через MapStruct бывает типичная проблема: маппер затирает уже существующие поля null'ами, если они не переданы во входном DTO. Это может легко привести к потере данных. Покажу, как решить это изящно. Допустим, у нас есть:

public class UserDto {
    private String name;
    private String email;
}
И сущность:

@Entity
public class User {
    private String name;
    private String email;
}
Если ты используешь обычный @MappingTarget, то:

@MappingTarget User user, UserDto dto
— не переданное поле email в dto затирает значение в user. 📌 Чтобы этого не происходило, добавь в маппер:

@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
public interface UserMapper {
    void update(@MappingTarget User user, UserDto dto);
}
💡 NullValuePropertyMappingStrategy.IGNORE говорит MapStruct: не трогай те поля, которые в DTO пришли как null. ⚠️ Это работает только для объектов, не для Optional и не для примитивов. Там потребуется другая стратегия — например, обёртки или @Condition. Такой подход позволяет обновлять только те поля, которые реально пришли, и не бояться случайного затирания. 👉@BookJava

Когда системы не хотят «дружить» между собой — начинается головная боль.😫 Особенно если речь идет о масштабировании и автома
Когда системы не хотят «дружить» между собой — начинается головная боль.😫 Особенно если речь идет о масштабировании и автоматизации процессов. Как избежать лишнего кода, сэкономить время и силы, при этом интегрировать внешние системы с Apache Kafka? Ответ — Kafka Connect. Записывайтесь на открытый вебинар, где мы разберем, как решить типичные проблемы интеграции и масштабирования. Что будет на вебинаре: ✒️Основы Kafka Connect: Архитектура и принципы работы, коннекторы ✒️Практическая реализация: Настройка и запуск коннекторов для интеграции с базами данных и файловыми системами ✒️Ошибки и их решение: Как эффективно отлаживать и масштабировать Kafka Connect 23 июня в 19:00 (МСК) — Бесплатно! Спикер: Валентин Шилин — Старший программист и аналитик данных в Deutsche Telekom IT GmbH Дарим чек-лист по установке Kafka Connect при регистрации на вебинар! Присоединяйтесь, если хотите научиться упрощать сложные задачи и увеличивать надежность своих систем: https://tglink.io/88d34f764ba1 Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFH5vcGg

Совет 💡 Если вы хотите получить сообщение о первопричине, вы можете легко и безопасно получить его с помощью Apache Commons
Совет 💡 Если вы хотите получить сообщение о первопричине, вы можете легко и безопасно получить его с помощью Apache Commons ExceptionUtils. Методы getRootCauseMessage(Exception ex) выдают сообщение в виде {ClassNameWithoutPackage} {ThrowableMessage} 👉@BookJava

🚀 Подборка Telegram каналов для программистов Системное администрирование, DevOps 📌 https://t.me/bash_srv Bash Советы https://t.me/win_sysadmin Системный Администратор Windows https://t.me/sysadmin_girl Девочка Сисадмин https://t.me/srv_admin_linux Админские угодья https://t.me/linux_srv Типичный Сисадмин https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin https://t.me/linux_odmin Linux: Системный администратор https://t.me/devops_star DevOps Star (Звезда Девопса) https://t.me/i_linux Системный администратор https://t.me/linuxchmod Linux https://t.me/sys_adminos Системный Администратор https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало) https://t.me/sysadminof Книги для админов, полезные материалы https://t.me/i_odmin Все для системного администратора https://t.me/i_odmin_book Библиотека Системного Администратора https://t.me/i_odmin_chat Чат системных администраторов https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др. https://t.me/sysadminoff Новости Линукс Linux 1C разработка 📌 https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С https://t.me/DevLab1C 1С:Предприятие 8 https://t.me/razrab_1C 1C Разработчик https://t.me/buh1C_prog 1C Программист | Бухгалтерия и Учёт https://t.me/rabota1C_rus Вакансии для программистов 1С Программирование C++📌 https://t.me/cpp_lib Библиотека C/C++ разработчика https://t.me/cpp_knigi Книги для программистов C/C++ https://t.me/cpp_geek Учим C/C++ на примерах Программирование Python 📌 https://t.me/pythonofff Python академия. https://t.me/BookPython Библиотека Python разработчика https://t.me/python_real Python подборки на русском и английском https://t.me/python_360 Книги по Python Java разработка 📌 https://t.me/BookJava Библиотека Java разработчика https://t.me/java_360 Книги по Java Rus https://t.me/java_geek Учим Java на примерах GitHub Сообщество 📌 https://t.me/Githublib Интересное из GitHub Базы данных (Data Base) 📌 https://t.me/database_info Все про базы данных Мобильная разработка: iOS, Android 📌 https://t.me/developer_mobila Мобильная разработка https://t.me/kotlin_lib Подборки полезного материала по Kotlin Фронтенд разработка 📌 https://t.me/frontend_1 Подборки для frontend разработчиков https://t.me/frontend_sovet Frontend советы, примеры и практика! https://t.me/React_lib Подборки по React js и все что с ним связано Разработка игр 📌 https://t.me/game_devv Все о разработке игр Библиотеки 📌 https://t.me/book_for_dev Книги для программистов Rus https://t.me/programmist_of Книги по программированию https://t.me/proglb Библиотека программиста https://t.me/bfbook Книги для программистов БигДата, машинное обучение 📌 https://t.me/bigdata_1 Big Data, Machine Learning Программирование 📌 https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций https://t.me/rust_lib Полезный контент по программированию на Rust https://t.me/golang_lib Библиотека Go (Golang) разработчика https://t.me/itmozg Программисты, дизайнеры, новости из мира IT https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 https://t.me/nodejs_lib Подборки по Node js и все что с ним связано https://t.me/ruby_lib Библиотека Ruby программиста https://t.me/lifeproger Жизнь программиста. Авторский канал. QA, тестирование 📌 https://t.me/testlab_qa Библиотека тестировщика Шутки программистов 📌 https://t.me/itumor Шутки программистов Защита, взлом, безопасность 📌 https://t.me/thehaking Канал о кибербезопасности https://t.me/xakep_2 Хакер Free Книги, статьи для дизайнеров 📌 https://t.me/ux_web Статьи, книги для дизайнеров Математика 📌 https://t.me/Pomatematike Канал по математике https://t.me/phis_mat Обучающие видео, книги по Физике и Математике https://t.me/matgeoru Математика | Геометрия | Логика Excel лайфхак📌 https://t.me/Excel_lifehack https://t.me/mir_teh Мир технологий (Technology World) Вакансии 📌 https://t.me/sysadmin_rabota Системный Администратор https://t.me/progjob Вакансии в IT

🧠 Трюк с @EventListener в Spring Boot — неочевидная ловушка Когда ты используешь @EventListener для обработки событий в Spri
🧠 Трюк с @EventListener в Spring Boot — неочевидная ловушка Когда ты используешь @EventListener для обработки событий в Spring, ты можешь попасть в баг, который очень сложно отловить в бою — пропущенные события. 📌 Пример:

@Component
public class MyListener {

    @EventListener
    public void on(MyEvent event) {
        // логика
    }
}
Если MyListener бин ещё не проинициализирован, а событие уже публикуется (ApplicationEventPublisher#publishEvent), то метод on просто не будет вызван. Spring не будет "накапливать" события для будущих слушателей. ⚠️ Это особенно критично, если ты триггеришь событие в @PostConstruct или в CommandLineRunner, а слушатель находится в другом бине, который ещё не загружен. 💡 Как избежать: 1. Используй явное управление порядком инициализации через @DependsOn. 2. Не публикуй события слишком рано — лучше в ApplicationReadyEvent:

@Component
public class Publisher {

    private final ApplicationEventPublisher publisher;

    public Publisher(ApplicationEventPublisher publisher) {
        this.publisher = publisher;
    }

    @EventListener(ApplicationReadyEvent.class)
    public void onReady() {
        publisher.publishEvent(new MyEvent(this));
    }
}
🧵 Альтернатива: если тебе нужно гарантированное выполнение в момент старта — лучше использовать ApplicationRunner или InitializingBean, где порядок можно контролировать проще. 👉@BookJava

🤯 🤯 🤯 Параллелизм в многопоточном Java-коде создаёт новые проблемы в тестировании, а баги остаются незамеченными? ⚡️ Пригл
🤯 🤯 🤯 Параллелизм в многопоточном Java-коде создаёт новые проблемы в тестировании, а баги остаются незамеченными? ⚡️ Приглашаем на открытый вебинар «Юнит тесты для многопоточного кода» 24 июня в 20:00 МСК. На вебинаре мы разберём: ✔️ Как обнаружить гонки, дедлоки и нестабильность в многопоточном коде. ✔️ Как использовать argumentCaptor и spy для проверки взаимодействия потоков. ✔️ Эмуляцию задержек и таймингов с помощью AdditionalAnswers. 🦾 После урока вы будете уверенно писать стабильные unit-тесты для многопоточного кода, выявлять скрытые баги и улучшать качество тестирования. Открытый урок проходит в преддверии старта курса «Java Developer. Advanced». Все участники получат скидку на обучение. 🔗 Регистрируйтесь прямо сейчас: https://vk.cc/cMZNzb Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

💡 Почему в Set.of() в Java нельзя добавить дубликаты и null? Когда используешь Set.of(...), можно столкнуться с двумя неожид
💡 Почему в Set.of() в Java нельзя добавить дубликаты и null? Когда используешь Set.of(...), можно столкнуться с двумя неожиданностями: 1. ❌ Нельзя добавлять дубликаты 2. ❌ Нельзя добавлять null Разбираемся, почему так: 🔐 Set.of(...) — это immutable Set Метод Set.of(...), добавленный в Java 9, создаёт неизменяемое множество. Это значит: * После создания ты не можешь изменить его (добавить, удалить элемент). * Все элементы внутри должны быть уникальны и не должны быть null. 📛 Почему нельзя дубликаты? Потому что Set по определению — это коллекция уникальных элементов. А Set.of(...) бросает IllegalArgumentException, сразу во время создания, если переданы дубликаты:

Set.of("a", "b", "a"); // 💥 Бросит исключение!
Это сделано для того, чтобы не было тихих ошибок — чтобы ты сразу увидел, что передал неуникальные значения. 🕳️ Почему нельзя null? Set.of(...) не принимает null, потому что он реализован через внутренние immutable структуры, которые не допускают null`-значений. При попытке добавить `null получишь NullPointerException.

Set.of("a", null); // 💥 NullPointerException
Это сделано сознательно — null может вести к неочевидным багам и плохо сочетается с концепцией неизменяемых коллекций. 👀 Хочешь изменяемый Set, который принимает null и дубликаты фильтрует сам? Используй HashSet:

Set<String> set = new HashSet<>();
set.add(null); // ✅ Можно
👉@BookJava

+9
Вопросы-ответы собеседования Можно ли создать экземпляр абстрактного класса? Что такое интерфейс? Как вызвать нестатический метод в статическом? Чем отличаются параметры от аргументов в методе? Что такое конструктор? Как его создать и вызвать? Что такое параметризованный конструктор? Что такое конструктор по умолчанию? Что такое приватный конструктор? Зачем он закрытый? Что такое статическая переменная? Как работает static поле? Что такое статический метод? Как вызвать static метод? источник 👉@BookJava

📚 Продвинутые методы архивации: LZ77/78 Приглашаем на открытый урок. 🗓 25 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках стар
📚 Продвинутые методы архивации: LZ77/78 Приглашаем на открытый урок. 🗓 25 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Алгоритмы и структуры данных». ✔️ На этом вебинаре мы завершим создание архиватора, добавив алгоритм LZ77/78. Разберем принцип словарного сжатия, механизм поиска повторяющихся последовательностей и формат их кодирования. ✔️ Имплементируем выбранный алгоритм и проведем финальное сравнение всех трех методов сжатия (RLE, Huffman, LZ77/78). Определим, какие алгоритмы лучше работают для различных типов файлов и почему. Завершающее практическое занятие для тех, кто хочет освоить продвинутые алгоритмы и увидеть их применение в реальном проекте.​​​​​​​​​​​​​​​​ 🎁 Всем участникам вебинара дарим промокод, который дает скидку на обучение - Algo5 👉 Регистрация на вебинар: https://vk.cc/cMXtZN Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576