Например, если переопределить toString(), можно для Day.MONDAY.toString() получить "Понедельник", вместо "MONDAY".
Пример в комментариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека тестировщика | QA, тестирование, quality assurance, manual testing, autotesting, ручное тестирование, автотесты
Class getClass() —
void notify() —
protected void finalize() —
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
LinkedList — это двусвязный список, который реализует интерфейсы List, Deque и Queue, обеспечивая гибкость в работе с элементами на обоих концах структуры.
🔹 Структура LinkedList
LinkedList хранит свои элементы в виде узлов (Nodes), каждый из которых содержит три части:
▪️ Ссылку на предыдущий узел
▪️ Ссылку на следующий узел
▪️ Само значение элемента
Каждый узел существует разрозненно в памяти, в отличие от массивов, где все элементы хранятся последовательно. Это позволяет LinkedList динамически изменять размер и не требует перераспределения памяти при добавлении новых элементов.
🔹 Производительность
▪️ Добавление: При добавлении нового элемента создается новый узел, который вставляется между двумя существующими узлами, изменяя у них ссылки. Если добавление происходит в начало или конец, обновляются только ссылки на предыдущий или следующий узел. Операции на концах занимают O(1), тогда как добавление в середину требует прохождения списка до нужного узла, что занимает O(n).
▪️ Удаление: Удаление элемента работает аналогично добавлению — обновляются ссылки соседних узлов. Удаление на концах списка занимает O(1), в середине — O(n).
▪️ Поиск: Поскольку узлы хранятся в памяти разрозненно, LinkedList не поддерживает эффективный случайный доступ. Чтобы найти элемент, нужно последовательно проходить список от начала или конца, из-за чело сложность поиска O(n).
🔹 Использование памяти
LinkedList требует дополнительной памяти для хранения двух ссылок (на предыдущий и следующий узел) для каждого элемента, что делает его более затратным по памяти по сравнению с массивами или ArrayList.
🔹 Преимущества и недостатки
▪️ Преимущества: Эффективные операции добавления и удаления в начале и конце списка, отсутствие необходимости в перераспределении памяти. Полезен для реализации очередей и стеков.
▪️ Недостатки: Медленный доступ к элементам (O(n)), высокий расход памяти из-за хранения ссылок, элементы хранятся разрозненно в памяти, что может приводить к фрагментации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет, друзья!
Какие форматы кроме обычных вопросов вам бы ещё было интересно увидеть? Пишите в комментариях.💬
Также ниже предлагаю несколько вариантов готовых форматов. Можем обсудить: какие лучше, какие хуже и как интересно реализовать их.
Сделаем контент ещё интереснее вместе🔼
Какие форматы кроме обычных вопросов вам бы ещё было интересно увидеть? Пишите в комментариях.
Также ниже предлагаю несколько вариантов готовых форматов. Можем обсудить: какие лучше, какие хуже и как интересно реализовать их.
Сделаем контент ещё интереснее вместе
Please open Telegram to view this post
VIEW IN TELEGRAM
Новые форматы (можно выбрать несколько):
Anonymous Poll
40%
Правда или миф (даётся факт, выбираете правда или миф, потом разбор вопроса)
83%
Частые ошибки на собеседовании (разбор вопросов, где часто ошибаются)
59%
Прогноз ошибок (даётся рабочий код, нужно найти узкое место и предположить, что может пойти не так)
23%
Дебаты (даётся вопрос, где нет верного ответа. В комментариях обсуждаются + и - каждого варианта)
8%
Оставить всё как есть, не нужно новых форматов
Please open Telegram to view this post
VIEW IN TELEGRAM
И переопределение (override), и перегрузка (overload) — это формы полиморфизма в Java, но они работают по-разному.
🔹 Переопределение происходит, когда
🔹 Перегрузка — это
Please open Telegram to view this post
VIEW IN TELEGRAM
Комментарии
Документация.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
"S" — это
🧑💻 Пример:
Класс, который отвечает за обработку данных, не должен
Please open Telegram to view this post
VIEW IN TELEGRAM
TreeSet — это коллекция, которая хранит уникальные элементы и автоматически сортирует их в натуральном порядке или по заданному Comparator. Под капотом используется самобалансирующееся красно-черное дерево, которое гарантирует, что добавление, удаление и поиск элементов будут происходить за логарифмическое время. В отличие от HashSet, TreeSet не только предотвращает дублирование элементов, но и поддерживает их упорядоченность.
🔹 Структура TreeSet
В основе TreeSet лежит красно-черное дерево — структура данных, которая поддерживает балансировку после каждой операции вставки или удаления. Т.е. дерево автоматически регулирует свою форму при каждом добавлении или удалении элемента, чтобы предотвратить чрезмерное «перерастание» дерева в одну сторону.
Элементы в TreeSet хранятся в виде узлов дерева:
▪️ Каждый узел содержит ключ и ссылки на дочерние узлы
▪️ Дерево автоматически сбалансировано — максимальная глубина любого пути от корня к листу в два раза меньше самой длинной возможной
▪️ Элементы располагаются в отсортированном порядке по мере добавления, что гарантирует логарифмическую сложность поиска и вставки
🔹 Производительность
▪️ Добавление: При добавлении элемента дерево балансируется, чтобы соблюсти свойства красно-черного дерева. Это обеспечивает сложность добавления O(log n).
▪️ Удаление: Работает схожим образом — дерево ребалансируется, а ссылки между узлами корректируются. Удаление также выполняется за O(log n).
▪️ Поиск: Благодаря сбалансированной структуре, поиск элемента в TreeSet занимает O(log n), что делает его быстрее, чем линейный поиск в несбалансированных структурах.
🔹 Использование памяти
Каждый узел в TreeSet хранит не только ключ, но и ссылки на дочерние узлы (левый и правый). Это создает определенные накладные расходы по памяти, ведь для каждого элемента требуется больше памяти, чем, например, в HashSet, где хранятся лишь сами элементы.
🔹 Преимущества и недостатки
▪️ Преимущества:
- Гарантированный порядок элементов: В отличие от HashSet, TreeSet хранит элементы в отсортированном виде. Это важно, если нужно быстро получать минимальные, максимальные или средние значения без дополнительной сортировки. Также можно извлекать диапазоны значений с помощью методов вроде subSet().
- Навигационные методы: TreeSet предоставляет мощные инструменты для навигации по набору, такие как методы для поиска ближайших элементов (floor(), ceiling()), что делает его удобным для задач с диапазонами данных.
▪️ Недостатки:
- Производительность: Операции в TreeSet медленнее, чем в HashSet.
- Большие накладные расходы по памяти: Для каждого элемента TreeSet требуется хранить дополнительные ссылки на дочерние узлы, что увеличивает потребление памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
👋🏭 От Hello World до Enterprise: 15 Java-проектов для начинающих и профессионалов
Ищете интересные идеи для Java-проектов? Можно начать с простых вещей, вроде создания чат-бота или текстового редактора, а затем усложнить задачи, взяв на себя разработку маркетплейса или системы онлайн-обучения. Эти идеи охватывают различные технологии, от баз данных и многопоточности до веб-сервисов и микросервисов. Воплощая их, вы сможете существенно улучшить свои навыки и добавить в портфолио проекты, которые привлекут внимание работодателей.
🔗 Ссылка на статью
Ищете интересные идеи для Java-проектов? Можно начать с простых вещей, вроде создания чат-бота или текстового редактора, а затем усложнить задачи, взяв на себя разработку маркетплейса или системы онлайн-обучения. Эти идеи охватывают различные технологии, от баз данных и многопоточности до веб-сервисов и микросервисов. Воплощая их, вы сможете существенно улучшить свои навыки и добавить в портфолио проекты, которые привлекут внимание работодателей.
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Блок finally почти всегда выполняется, но есть несколько исключений, когда его выполнение будет пропущено:
🔹
🔹
🔹
В нормальных условиях блок finally всегда выполняется, даже если в блоках try или catch произошла ошибка.
Please open Telegram to view this post
VIEW IN TELEGRAM
"I" — это принцип
🧑💻 Пример:
Please open Telegram to view this post
VIEW IN TELEGRAM
- Если два объекта равны согласно методу equals(),
- Если два объекта имеют одинаковый хэш-код,
🔹 Если нарушить этот контракт, возникают такие проблемы:
- Проблемы с коллекциями:
- Некорректная работа методов:
Please open Telegram to view this post
VIEW IN TELEGRAM